02.07 還在使用 SVN 的企業請注意,是時候遷移到 Git 了

前言

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

還在使用 SVN 的企業請注意,是時候遷移到 Git 了

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 repo
gitsvnclonehttps://example.io/path/svn/repo-Ttrunk-bbranches-ttags
gitremoteaddgitee [email protected]:example/name.git
gitpush-ugitee--all
/<code>

如果你以後無需追蹤原有的 SVN 存儲庫,可以在 Push 之前運行:

<code>git branch -m trunk master/<code>

當存儲庫越來越大時,git svn 的缺陷便很明顯了,轉換耗時比較長,這也是 GCC 從 SVN 轉成 Git 反反覆覆花了好幾年的原因。

使用 svn2git(ruby) 轉換

在 Github 上有個實用工具 svn2git,這個工具主要是簡化了轉換流程:

<code>sudo gem install svn2git
svn2git 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 kdelibs
match /trunk/KDE/kdelibs/
min revision 123453
max revision 456789
repository kdelibs
branch master
end match
end 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/svnrepo
progress Skipped revision 0
progress Imported revision 1
progress Imported revision 2
progress Imported revision 3
...
progress Imported revision 99999

progress 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,享受企業級項目管理和代碼協作的一體化雲平臺。


分享到:


相關文章: