天天看點

svn遷移到git

  最近需要将項目從svn遷移到git,至于原因請忽略,至于svn與git差別優劣請自行百度。一共有兩種方式可行:

第一種方式較為常見,但是會丢失之前svn版本送出記錄,就是将svn checkout到本地然後上傳到git上

詳情參見:http://blog.csdn.net/hanhailong726188/article/details/46738929

第二種方式較為複雜,但是可以保留之前svn版本送出記錄,執行指令如下:

git svn clone https://172.16.0.241:8443/svn/wsgjp/ -r 76896:HEAD --no-metadata --authors-file=user.txt -s
cp -Rf .git/refs/remotes/origin/* .git/refs/heads/
rm -Rf .git/refs/remotes
git remote add origin ssh://[email protected]/welkin/batchserver.git
git push origin --all      

知識點:

如果svn上的commit次數非常多, git svn clone 就會非常慢,一般超過幾百個版本就要大概十分鐘。此時可以在clone的時候隻下載下傳部分版本,

指令:git svn clone -r<開始版本号>:<結束版本号> <svn項目位址> [其他參數]

說明:其中76896為svn版本号,HEAD代表最新版本号,就是隻下載下傳svn伺服器上版本76896到最新的版本的代碼.

no-metadata:阻止git導出SVN包含的一些無用資訊

authors-file:必須指定svn帳号在git中的映射

user.txt:存儲svn賬号與gitlab上賬号的關聯性,如下:

svn遷移到git
生成指令:svn log --xml | grep author | sort -u | perl -pe 's/.*>(.*?)<.*/$1 = /' > user.txt
剩下的需要自己去vim user.txt手動去更改

VisualSVN Server = wssf2014<zqhym***@gmail.com>
yqdong = yqdong<×××@163.com>
......

格式: svn使用者名 = git使用者名<git使用者對應的郵箱帳号>      

  注意: svn裡面有的賬号必須要做關聯,否則clone會失敗.比如上面的user11找不到是哪個開發人員,也不知道它該對應哪個git賬号,那就随便指定一個git賬号就行了,這樣做的目的其實就是将user11在svn裡面的所有送出日志關聯到yqdong的git賬号下。 轉到git之後,原svn賬号就無關緊要,各司其職了。

-s   告訴 Git 該 Subversion 倉庫遵循了基本的分支和标簽命名法則,也就是标準布局。

如果你的主幹(trunk,相當于非分布式版本控制裡的master分支,代表開發的主線),分支(branches)或者标簽(tags)以不同的方式命名,則應做出相應改變。

-s參數其實是-T trunk -b branches -t tags的縮寫,這些參數告訴git這些檔案夾與git分支、tag、master的對應關系。

如果不是上述這種命名法則,那你需要使用 

--tags

--branches

--trunk

 參數(請通過 

git svn help

 自行了解)

  1. trunk指定導出倉庫的主幹項目路徑。
  2. branches指定svn的分支項目路徑。

HELP:

 常用git指令清單:http://blog.jobbole.com/95979/

 參考git教程:https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000

 常見git指令關聯:

svn遷移到git
svn遷移到git

svn檔案辨別圖

svn遷移到git