svn遷移到git倉庫的方案

svn遷移到git倉庫並保留commit歷史記錄

最近公司要求將代碼庫從svn遷移到gitlab,由於之前一直是由svn做版本控制。最簡單的方式是將svn的內容export出來,然後添加到gitlab即可。但是,如果svn用的時間很長了,而且很多commit,所以就希望保存svn commit的信息以便做版本的控制和比較以及後期項目的維護。摸索了一天,查看gitlab官方提供的文檔中兩個方法講的都比較模糊,最後在git上找到了解決的方法。

前提: 
已安裝git 
已安裝gitlab

遷移 
1、環境準備

sudo apt-get install git-svn
  • 1

2、創建用戶映射 
在 Subversion,每個提交者在都在主機上有一個用戶名,記錄在提交信息中. 比如 blame 的輸出以及 git svn log。如果想讓這條信息更好的映射到 Git 作者數據裏,則需要從 SVN 用戶名到 Git 作者的一個映射關係建立一個叫做 user.txt 的文件,用如下格式表示映射關係:

zhangsan = zhangsan <zhangsan@gmail.com>
lisi = lisi <lisi@gmail.com>
wangwu = wangwu <wangwu@gmail.com>
  • 1
  • 2
  • 3

在svn庫下執行該命令可以在當前文件夾生成users.txt,獲得 SVN 作者的列表:

svn log ^/ --xml | grep -P "^<author" | sort -u | perl -pe 's/<author>(.*?)<\/author>/$1 = /' > users.txt
  • 1

根據svn帳號與git帳號的映射,補充users.txt爲上述格式。

3、獲取SVN的倉庫到本地

通過 git svn clone 命令可以把整個 SVN 倉庫導入到一個本地的 git 倉庫中, 但這樣導入的代碼提交歷史很糟糕, 需要做一些處理. 在 clone 後面添加 –no-metadata 來阻止 git svn 包含那些 SVN 的附加信息。同時爲了獲得更精確的提交者 ID 和郵箱, 添加 –authors-file 參數

git svn clone svn://ip端口/projectname --no-metadata --authors-file=users.txt projectname
cd projectname
  • 1
  • 2

4、在GitLab上創建Git倉庫 
爲 GitLab 上爲 SVN 倉庫創建對應的 Git 倉庫,會生成如下的倉庫地址:

[email protected]:<group>/<projectname>.git
  • 1

5、添加遠程git倉庫

在本地,將上面創建的倉庫服務器添加爲遠程服務器並且向它推送。下面是新增遠程服務器的例子:

git remote add origin git@gitlab.com:<group>/<projectname>.git
  • 1

6、 提交代碼到git倉庫

通過以下命令將本地代碼提交到遠程git倉庫:

git push -u origin master
  • 1

參考資料: 
http://gitlab.deepano.com/help/workflow/importing/migrating_from_svn 
https://www.zybuluo.com/Jazka/note/173956 
https://www.bbsmax.com/A/lk5alv0NJ1/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章