svn 遷移至git操做手冊html
項目交付、版本管理工具變動等狀況下,遷移svn舊歷史記錄有很大必要,方便後續追蹤文件的提交歷史,文件修改記錄比對等。git自帶了從svn遷移至git的工具命令,可很好的對svn上的提交歷史作遷移和映射,操做簡單方便。可是初次接觸不熟練,這裏作一個總結和記錄,內容儘可能簡單化。爭取提供給剛剛接觸git和準備遷移的用戶一個簡單易懂的方案。mysql
舊svn服務器:192.168.1.185(對生產的敬畏)git
新svn+git服務器:192.168.1.203github
我是把舊的svn經過dump下來傳到203的svn上面這須要點時間,這個原理跟mysql的dump同樣sql
把SVN上的代碼倉庫遷移到Gitlab上,實際上就是把SVN倉庫轉變成Git倉庫,而且但願能保留原SVN倉庫的Commit等歷史記錄,這一點很重要。
SVN遷移到Gitlab須要安裝git-svn 服務器
yum install -y git-svn
創建users.txt(存儲svn帳號與gitlab上帳號的關聯性)svn
svn log svn://192.168.1.203 -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > ./users.txt
獲得的結果:工具
而後開始把SVN倉庫轉變成Git倉庫,執行如下命令:gitlab
git svn clone svn://192.168.1.203/XinglvTmc/ --no-metadata --authors-file=users.txt --trunk=trunk --tags=tags --branches=branch XinglvTmc
git remote add origin URL
注:目的地gitlab倉庫地址post
git push origin --all
爲了將標籤變爲合適的 Git 標籤,運行
# cd my_project # cp -Rf .git/refs/remotes/origin/tags/* .git/refs/tags/ # rm -Rf .git/refs/remotes/origin/tags
這會使原來在 remotes/origin/tags/ 裏的遠程分支引用變成真正的(輕量)標籤。
接下來,將 refs/remotes 下剩餘的引用移動爲本地分支:
# cp -Rf .git/refs/remotes/* .git/refs/heads/ # rm -Rf .git/refs/remotes
git remote add origin http://192.168.1.203/root/xinglvtmc.git/
不當心將git遠程地址配錯了,再次配置提示如下錯誤:
fatal: 遠程 origin 已經存在。
此時只須要將遠程配置刪除,從新添加便可;
git remote rm origin
git remote add origin https://github.com/***/WebCrawlers.git
再次提交文件便可正常使用
粗心形成的小錯誤,順便說一下,若是git沒有commit就執行push操做會出現如下錯誤
fatal: unable to access 'https://github.com/***/WebCrawlers.git/': Empty reply from server
解決:只須要先commit 在 push便可