概述
公司要求將之前使用SVN進行管理的項目遷移到Gitlab進行項目管理,但是運維連不上我們這邊的SVN服務器,於是我們就得自己將SVN項目遷移到Gitlab。Yeah!終於有我表現的機會了。
要求保留SVN上的提交記錄
總體的執行步驟如下:
- 賬號對應
- git-svn拉取原來SVN項目
- 提交項目到Gitlab上
執行步驟
接下來我們就要進行轉換了。
賬號對應
SVN使用的是用戶賬號展示的提交記錄,但是git使用的是賬號和郵箱進行人員確認的,因此我們需要使用將二者進行對應。
新建個txt文本文檔,名字隨便取(但是我這兒使用是svn2git.txt),文本內容如下:zhangsan=zhangsan <zhangsan@gmail.com>
,等號左邊是SVN賬號,等號右邊是Gitlab賬號和郵箱信息(注意:離職人員也得轉換,否則報錯)。
先別急,SVN賬號可以用命令導出來的。
打開你的Git BASH(你得先安裝了Git以后才有的)進入你要保存賬號對應文件(我這里是svn2git.txt)的目錄(我是在d盤根目錄使用:cd /d
),
執行如下命令: svn log 你的SVN項目的url -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2"="$2" <"$2"@gmail.com>"}' | sort -u > ./svn2git.txt
,這是使用的Linux的awk命令導出的svn賬號信息格式化的,當然我這里用的事gmail郵箱,你可以自定義郵箱,打開看下是不是和上面的文本內容格式是一致的。
git-svn拉取SVN項目
沒錯,git內置了一個git-svn的工具,你可以用git-svn按照git的方式來管理svn項目,但是強烈不推薦這么干。
接下來使用git-svn拉取你的SVN項目,命令如下:git svn clone "你的SVN項目的url" --no-metadata --authors-file="d:/svn2git.txt" 你自定義的項目名
,這是使用你的賬號對應轉換SVN的提交記錄為git提交記錄。
提交項目到gitlab
切換到使用Git-svn拉取的項目目錄下,執行:git config --local user.name "你的gitlab用戶名"
,git config --local user.email "你的gitlab郵箱"
,這兩個是配置項目用戶信息,
git remote add origin 你的gitlab項目的git地址(注意使用http開頭的,不雅用git開頭的)
, git push -u origin master
,這兩個命令是添加遠程操作url和推送遠程。
總結
svn遷移git就是通過git-svn將用戶提交記錄進行對應,然后推送到新項目中去。因此建議讓大家把之前要提交的代碼全部提交上去然后開始進行推送,否則就得拷貝拷貝到新項目代碼了。