How to Convert Subversion Repo to Git

用了比较长时间的 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:WorkingCXX	hirdparty-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:ProgsTortoiseSVNinsvnserve.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:ProgsTortoiseSVNinsvnserve.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:ProgsTortoiseSVNinsvnserve.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:ProgsTortoiseSVNinsvnserve.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:ProgsTortoiseSVNinsvnserve.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

原文地址:https://www.cnblogs.com/huys03/p/3263955.html