最近公司要求將代碼庫從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/