前言
關於使用 Git 還是 SVN 進行版本控制的討論一直存在,Git 和 SVN 的區別也十分明顯:

2000 年 CollabNet 創建了 Subversion 項目,一晃 SVN 已經誕生 20 年了,截至 r1873568 SVN 主分支共有 59674 次提交,32 個開發者,288 次發佈。2005 年 Linus Torvalds 創建了 Git,截至 de93cc14ab7e8db7645d8dbe4fd2603f76d5851f,git 主分支共有 58209 次提交,1343 個貢獻者,742 次發佈,諸如 Google,Microsoft,Facebook 這樣的巨無霸公司都在使用 Git,Git 主要開發者來自 Google 和 Microsoft。
人多力量大,眾人拾柴火焰高,貢獻越多碼越好,我們可以看到 SVN 只是緩慢變好,而 Git 卻在飛速增強,到了今天為什麼還不從 SVN 遷移到 Git?
Gitee 的功能
用戶在使用 SVN 時,常用的功能有部分檢出,目錄權限控制等等,並一直以此來否定 Git 的進步。而隨著 Git 的不斷增強,Gitee 開發者的不斷努力,Gitee 逐漸擁有了這些功能。
2019 年 5 月底,Gitee 新增只讀目錄支持,而 Git 本身是沒有這個特性的,主流的 Git 平臺一般會提供只讀分支的功能,無法實現對個別文件或者文件夾的只讀限制,但 Gitee 提供了這個功能。
2020 年 1 月 17 日,碼雲目前已經初步支持 Git 部分克隆,結合部分克隆和稀疏檢出能夠提供比 SVN 更好的部分檢出體驗。
Gitee 除了在 Git 功能上推陳出新,還在團隊協作,企業管理上增加了很多功能,自定義權限管理更切合企業實際,任務,里程碑,成員週報能夠讓開發者異地完成諸多任務,並被考核。 2019 年度疫情爆發以來,各地交通管制,返程復工有諸多不便,使用 Gitee 遠程工作正當其時,為什麼還不從 SVN 遷移到 Gitee 呢?
將 SVN 存儲庫遷移到 Gitee
企業只需要在 Gitee 上創建空存儲庫,然後將 SVN 存儲庫轉換成 Git 存儲庫推送到 Gitee,便完成了向 Gitee 的遷移。
使用 git svn 工具轉換
將 SVN 存儲庫轉換成 Git 存儲庫非常簡單,使用 git 自帶的命令便可以完成:
<code># convert repo to git repogit svn clone https://example.io/path/svn/repo -T trunk -b branches -t tagsgit remote add gitee [email protected]:example/name.gitgit push -u gitee --all/<code>
如果你以後無需追蹤原有的 SVN 存儲庫,可以在 Push 之前運行:
<code>git branch -m trunk master/<code>
當存儲庫越來越大時,git svn 的缺陷便很明顯了,轉換耗時比較長,這也是 GCC 從 SVN 轉成 Git 反反覆覆花了好幾年的原因。
使用 svn2git(ruby) 轉換
在 Github 上有個實用工具 svn2git,這個工具主要是簡化了轉換流程:
<code>sudo gem install svn2gitsvn2git http://svn.example.com/path/to/repo/<code>
這個工具能夠提供更好的提交日誌,唯一遺憾的是,自 2016 年以來便不再更新。
使用 svn-all-fast-export/svn2git 轉換
KDE 的開發者開發了 svn-all-fast-export/svn2git 這個工具在服務器上將 SVN 存儲庫轉換成 git 存儲庫,由於省去網絡傳輸和檢出,速度要遠勝於 git svn/svn2git(ruby)。
KDE 開發者撰寫了使用示例:UsingSvn2Git,這一工具使用難度較高,需要創建規則文件,如果存儲庫較小,不建議使用此類工具。
<code>create repository kdelibsmatch /trunk/KDE/kdelibs/ min revision 123453 max revision 456789 repository kdelibs branch masterend matchend repository/<code>
使用 git-svn-fast-import 轉換
Gitee 還移植了一個 SVN to Git 的工具 git-svn-fast-import,這個轉換又快又簡單:
<code>$ mkdir -p repo.git && cd repo.git$ git init$ git-svn-fast-import --stdlayout -r 0:100000 /path/to/svnrepoprogress Skipped revision 0progress Imported revision 1progress Imported revision 2progress Imported revision 3...progress Imported revision 99999progress Imported revision 100000/<code>
Gitee 開發者曾用此工具為某私有化客戶將存儲庫從 SVN 轉到 Git。
在 Gitee 上使用 SVN 功能
隨著開發者投入的逐步減少,使用 SVN 接入 Gitee 並不被提倡。
但是,如果你仍然想在遷移到 Gitee 後,使用落後的 SVN,你可以在項目設置頁面打開 SVN,然後使用:
<code>svn co svn+ssh://gitee.com/example/repo/<code>
這將使用 SVN Over SSH 的方式訪問遠程存儲庫,只需要配置好 SSH 公鑰,便可免密使用 SVN 協議訪問遠程 Git 存儲庫。
總結
開發者為開發者,Gitee 不斷改進 Git 的體驗,願更多的企業從 SVN 遷移到 Gitee,享受企業級項目管理和代碼協作的一體化雲平臺。
閱讀更多 開源G醬 的文章