之前我們介紹了《①將SVN遷移到GitLab-單分支遷移》,文中研究了svn遷移到git單分支的操作過程,本文針對實際開發過程中svn使用到的trunk、branches、tags情況進行遷移,本文的svn代碼情況如圖所示:
具體的可以參考博文,《SVN的branches、trunk、tags使用》。
一、拷貝svn相關倉庫代碼到本地
svn co --username shaw001 --password shaw001 svn://192.168.109.130/ code
期間要輸入svn賬號密碼確認,
成功之后,會生成一個code文件夾,里頭也檢出了相關分支代碼記錄。

二、生成用戶列表,並配置相關svn和gitlab用戶對應關系
svn log --xml | grep author | sort -u | perl -pe 's/.*>(.*?)<.*/$1 = /' > /home/svn/users.txt
紅色字體標注路徑文件可修改。
查看下相關的文件內容:
修改與gitlab的對應關系,修改后如下:
三、拷貝svn代碼,並本地生成gitlab倉庫
通過以下命令拷貝svn代碼生成本地gitlab倉庫:
git svn clone svn://192.168.109.130/ --authors-file=/home/svn/users.txt --no-metadata -s branches
四、配置遠程倉庫tags和branches相關配置
進入到branches文件夾里頭,配置相關tag記錄:
cp -Rf .git/refs/remotes/origin/tags/* .git/refs/tags/ rm -Rf .git/refs/remotes/origin/tags
這兒要注意下,有時候會提示沒有.git/refs/remotes/origin/tags/*目錄,這是就要自己去git目錄里頭查看具體是什么目錄,有可能是.git/refs/remotes/tags/*路徑
配置相關分支記錄
cp -Rf .git/refs/remotes/* .git/refs/heads/
rm -Rf .git/refs/remotes
五、遠程創建branches項目進行代碼接收,並設置gitlab目標推送地址
登錄gitlab創建一個branches項目

設置推送地址:
git remote add origin git@192.168.109.130:shaw001/branches.git
六、配置gitlab全局用戶變量
配置全局用戶變量,另外還得配置sshKey密鑰進行免密推送。
git config --global user.name shaw001
git config --global user.email shaw001@example.com
七、推送分支和標簽到遠程
推送分支到遠程gitlab倉庫
git push origin --all
從記錄可以看出,分支已經推送了。接下來推送標簽到遠程gitlab倉庫
git push origin --tags
到gitlab查看下相關記錄。

可以看到代碼、分支、標簽都已經同步到gitlab上了。我們看下提交記錄:

ok,SVN多分支、多標簽遷移gitlab就介紹完了,下篇文章介紹如果svn繼續開發,如何增量同步代碼到gitlab上。
完整流程腳本如下:
1、拷貝svn相關倉庫代碼到本地
svn co --username shaw001 --password shaw001 svn://192.168.109.130/ code
2、生成用戶列表,並配置相關svn和gitlab用戶對應關系
svn log --xml | grep author | sort -u | perl -pe 's/.*>(.*?)<.*/$1 = /' > /home/svn/users.txt
shaw001@example.com
shaw002@example.com
3、拷貝svn代碼,並本地生成gitlab倉庫
git svn clone svn://192.168.109.130/ --authors-file=/home/svn/users.txt --no-metadata -s branches
4、配置遠程倉庫tags和branches相關配置
cp -Rf .git/refs/remotes/origin/tags/* .git/refs/tags/
rm -Rf .git/refs/remotes/origin/tags
cp -Rf .git/refs/remotes/* .git/refs/heads/
rm -Rf .git/refs/remotes
5、設置gitlab目標推送地址
git remote add origin git@192.168.109.130:shaw001/branches.git
6、配置gitlab全局用戶變量
git config --global user.name shaw001
git config --global user.email shaw001@example.com
7、推送分支和標簽到遠程
git push origin --all
git push origin --tags
