我使用svn2git但它总是在同一行失败:我的命令:
svn2git https://my-svn/proj/ --revision 1000:1001 --username xxx
一小时后,此命令停止运行并且失败并显示:
Broken pipe at /usr/lib64/perl5/vendor_perl/SVN/Ra.pm line
623.
什么会导致这个问题?
因为一次性迁移git-svn
不是转换存储库或存储库部分的正确工具。如果您想使用 Git 作为现有 SVN 服务器的前端,这是一个很棒的工具,但对于一次性转换,您不应该使用,但它更适合这个用例。git-svn
svn2git
有很多称为svn2git
的工具,可能最好的是来自https://github.com/svn-all-fast-export/svn2git的 KDE 工具。我强烈建议使用该svn2git
工具。这是我所知道的最好的,并且在你可以用它的规则文件做什么方面非常灵活。
您使用的svn2git
工具基于git-svn
并因此具有大多数相同的缺点。
您将能够轻松配置svn2git
s 规则文件以从当前的 SVN 布局中生成您想要的结果,您还可以通过给它一个命令行选项来告诉它保留空目录,使其将空.gitignore
文件放在目录中以保留它们.
如果您不是 100% 了解存储库的历史,那么在将 SVN 存储库迁移到 Git 时,svneverever
http ://blog.hartwork.org/ ?p=763是一个调查 SVN 存储库历史的好工具。
尽管git-svn
(或svn2git
您使用的)更容易开始,但除了灵活性之外,还有一些其他原因说明为什么使用 KDEsvn2git
而不是git-svn
更优越:
svn2git
对于具有分支和合并等的更复杂的历史尤其如此git-svn
一个额外的空提交,这也使它们不是分支的一部分,所以在fetch
你给命令之前正常不会得到它们,--tags
因为默认情况下只有指向已获取分支的标签也会被获取。使用正确的 svn2git 标签是它们所属的地方svn2git
,git-svn
最终您将失去历史svn2git
将一个 SVN 存储库拆分为多个 Git 存储库svn2git
正确的转换比使用正确的要快无数倍git-svn
你看,有很多原因导致git-svn
KDE 更差而 KDEsvn2git
更胜一筹。:-)
据我所知,“断管”错误是由于接收文件时出现问题。它可能真的很大,或者可能还有其他奇怪的地方。
如果遇到错误,幸运的是,在大多数情况下,您可以简单地重新运行git svn clone
命令或其他相关命令,通常它可以从中断的地方无缝恢复。
如果您git-svn
曾经将 SVN 存储库一次性迁移到 Git,请务必遵循Atlassian 的指南。他们有一个工具可以将 SVN 标签正确转换为 Git 标签,但这是一个破坏性的过程,你将无法再使用 git repo 与 SVN 同步,所以只有在你最终准备好放弃时才这样做SVN 回购。