前提
将svn代码及其分支、提交记录迁移到git仓库。如果只是迁移代码,直接git init
&&git commit
就好了。
操作
git svn clone svn地址 --authors-file=users.txt --no-metadata --prefix "" -s 目标git目录名
- 然而,在CentOS执行的时候报错如下:
Can't locate SVN/Core.pm in @INC (@INC contains: /root/share/perl5 /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at /root/share/perl5/Git/SVN/Utils.pm line 6.
BEGIN failed--compilation aborted at /root/share/perl5/Git/SVN/Utils.pm line 6.
Compilation failed in require at /root/share/perl5/Git/SVN.pm line 32.
BEGIN failed--compilation aborted at /root/share/perl5/Git/SVN.pm line 32.
Compilation failed in require at /root/libexec/git-core/git-svn line 23.
BEGIN failed--compilation aborted at /root/libexec/git-core/git-svn line 23.
- 后来找到一篇解决方案:
可惜,后面的步骤看不懂。想着,在如此旧版的系统上也是迁移,Windows上面也是迁移,干脆直接在Windows上面迁移。
然而,依旧报错:
git-svn migration fatal: not a valid SHA1
update-ref refs/heads/master refs/remotes/trunk: command returned error: 128
完善后的解决办法
各种翻查资料,尝试去学习svn的分支理念。
思来想去,发现应该是项目地址并不完整,或者是权限就到这个目录下面了,缺少了trunk文件夹(也就是svn中的主分支)。
由于权限问题的话,那就不管了。既然svn敢拿分支名创建文件夹,那我就直接将文件夹路径作为分支名,作为迁移仓库的主目录,执行目录如下:
# 注意:不要把doc1/doc2的斜杠搞错了!
git svn clone svn://172.0.0.1 --trunk=doc1/doc2 --authors-file=users.txt --no-metadata --prefix "" -s xxx_system
此处只是增加了--trunk=doc1/doc2
的选项,指定某个目录下作为仓库根目录