从SVN迁移到Git(包括SVN历史纪录)【最系统的讲解】
從SVN遷移到git有很多方法,最簡單的就是使用git包自帶的git svn命令(git v1.7及以上)。除此之外還有一些第三方的專門的轉(zhuǎn)換工具如http://www.subgit.com/,https://www.atlassian.com/git/tutorials/migrating-overview/等。但是由于是第三方工具,感覺能不用就不用。
使用git svn命令最經(jīng)典的就是
$git svn clone --stdlayout --no-metadata -A users.txt svn://hostname/path dest_dir
其中:
--stdlayout就是說你使用的是標(biāo)準(zhǔn)的"trunk/, branches/, tags/" 等標(biāo)記;
?--no-metadata命令是為了不要svn的額外的commit信息(UUID),一般也不需要,所以都帶這個參數(shù);
users.txt是把SVN的用戶轉(zhuǎn)成git用戶的文件,這個文件可以用SVN的命令生成(如果用戶很少自己寫也可以),文件的形式如下:
svn_user1 = git_user1 < git_user1_mail@xxx.com> svn_user2 = git_user2 < git_user2_mail@xxx.com>每行一個user,等號左邊是SVN的用戶(區(qū)分大小寫),等號右邊就是git的用戶,git的用戶必須存在用戶名和郵箱。如果用戶比較多,可以使用下命令創(chuàng)建:
svn log -q | awk -F '|' '/^r/ {sub("^ ", "", $2); sub(" $", "", $2); print $2" = "$2" <"$2">"}' | sort -u > users.txt然后編輯user.txt為上面的格式。
后面的url就是你的SVN checkout的url,支持的協(xié)議有SVN://,http://,https://,(如果你是做的本地服務(wù)器用的file:///形式的,有時候是不行的)
dest_dir就是目標(biāo)git目錄了。
其實這個命令是一個合成版本,可以使用它的拆分版,即:
$mkdir dest_dir && cd dest_dir $git svn init file:///xxxxx/xxxx/xxxx --no-metadata $git config svn.authorsfile ../users.txt $git svn fetch參數(shù)和git svn clone是一樣的,其實就是git svn的分解版。
如果你的SVN沒有其他的branch,到這里就完了。如果有其他的branch,還需要手動創(chuàng)建git的branch遷移。
然后就可以把剛才的git push到遠程服務(wù)器,當(dāng)然,只在本地用也是可以commit的,不影響使用。(這是git和svn的一個很大的區(qū)別)
參考資料:http://stackoverflow.com/questions/79165/how-to-migrate-svn-repository-with-history-to-a-new-git-repository
總結(jié)
以上是生活随笔為你收集整理的从SVN迁移到Git(包括SVN历史纪录)【最系统的讲解】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++矩阵优化算法
- 下一篇: 2020地区mysql表_2020年甘肃