How to Convert Subversion Repo to Git

獨木發表於2013-08-17

用了比較長時間的 SVN,但現在新的專案都採用Git。之前的專案又不得不維護,那麼能不能將專案從SVN遷移到Git呢。答案是肯定的,網上的方案是 git-svn,或者更高階的封裝 svn2git。

方法其實很明確,匯出SVN的歷史資料,建立新的Git Repo。但是在實際操作中遇到了一些問題,且在這裡記錄一下。這次的操作環境是Windows。

1. git-svn只支援通過網路連線(svn:// 或 http://之類)的方式來轉換

這樣的話,其實比較麻煩,需要提供網路形式的連線方式。一些小專案就是本地建的repo。 

 

git.exe svn clone "file:///D:/Repositories/thirdparty"  "F:\Working\CXX\thirdparty-test" -T trunk -b branches -t tags

Initialized empty Git repository in f:/Working/CXX/thirdparty-test/.git/
Couldn't open a repository: Unable to open an ra_local session to URL: Unable to open repository 'file:///D:/Repositories/thirdparty': Expected FS format '2'; found format '4' at /usr/lib/perl5/site_perl/Git/SVN.pm line 310



git did not exit cleanly (exit code 1) (2344 ms @ 2013/8/17 10:11:08)

  

2. 利用TortoiseSVN自帶的svnserve.exe來提供svn://連線方式

 

D:\Repositories>"E:\Progs\TortoiseSVN\bin\svnserve.exe" -t -r D:\Repositories
( success ( 2 2 ( ) ( edit-pipeline svndiff1 absent-entries commit-revprops depth log-revprops atomic-revprops partial-replay ) ) )
D:\Repositories>"E:\Progs\TortoiseSVN\bin\svnserve.exe" -i -r D:\Repositories
( success ( 2 2 ( ) ( edit-pipeline svndiff1 absent-entries commit-revprops depth log-revprops atomic-revprops partial-replay ) ) )

D:\Repositories>"E:\Progs\TortoiseSVN\bin\svnserve.exe" -i --listen-port 3690 -r D:\Repositories
( success ( 2 2 ( ) ( edit-pipeline svndiff1 absent-entries commit-revprops depth log-revprops atomic-revprops partial-replay ) ) )
D:\Repositories>"E:\Progs\TortoiseSVN\bin\svnserve.exe" -i --listen-port 13690 -r D:\Repositories
( success ( 2 2 ( ) ( edit-pipeline svndiff1 absent-entries commit-revprops depth log-revprops atomic-revprops partial-replay ) ) )
D:\Repositories>"E:\Progs\TortoiseSVN\bin\svnserve.exe" -d --listen-port 13690 -r D:\Repositories

之前一直連不上,出現下面的錯誤:

svn Connection refused at /usr/lib/perl5/site_perl/Git/SVN.pm line 310

利用-d選項後,可以實現正常訪問。

 

3. 轉換之後,可以將這個repo推到倉庫中。

 

參考連結:

https://code.google.com/p/support/wiki/ConvertingSvnToGit

相關文章