git svn克隆失败,显示“error: git-svn died of signal 11”。

9
我正在尝试使用 Ubuntu 16.4 机器将我的大型 SVN 存储库转换为 Git。为此,我遵循此教程。我已安装最新的 Git、SVN 和 git-svn 工具。我的问题是,每次我运行 'git svn clone' 命令时,都会收到错误 'error: git-svn died of signal 11',而没有任何进一步的信息。在这个论坛上搜索了一下,我找到了另一个帖子:git svn clone died of signal 11 under cygwin。它引导我前往该网站寻求解决方案,建议使用 'git svn fetch' 恢复该过程。我这样做了,它似乎工作了一天,但不幸的是,它再次因相同的错误停止了,'git svn fetch' 看来也无济于事。我想知道是否有人遇到过这个问题或如何找到任何痕迹,因为除了这个错误之外,我没有得到任何进一步的解释。编辑:所以我继续寻找这个问题,我发现如果使用 'valgrind',您可以获得更多信息,所以我这样做了。现在 'git svn fetch' 在另一个点停止,并显示此消息:
==17006== Warning: invalid file descriptor -1 in syscall close()
==17006== 
==17006== HEAP SUMMARY:
==17006==     in use at exit: 43,779,830 bytes in 71,103 blocks
==17006==   total heap usage: 7,178,701 allocs, 7,107,598 frees, 2,123,468,574 bytes allocated
==17006== 
==17006== LEAK SUMMARY:
==17006==    definitely lost: 156,556 bytes in 40 blocks
==17006==    indirectly lost: 156,338 bytes in 51 blocks
==17006==      possibly lost: 43,394,719 bytes in 70,805 blocks
==17006==    still reachable: 72,217 bytes in 207 blocks
==17006==                       of which reachable via heuristic:
==17006==                         newarray           : 53,032 bytes in 1,637 blocks
==17006==         suppressed: 0 bytes in 0 blocks
==17006== Rerun with --leak-check=full to see details of leaked memory
==17006== 
==17006== For counts of detected and suppressed errors, rerun with: -v
==17006== ERROR SUMMARY: 2 errors from 1 contexts (suppressed: 0 from 0)

有没有想法这是什么?

编辑2:

我现在看到运行我的正常'git svn fetch'说一切都完成了...我不明白使用'valgrind'如何影响,但似乎它帮助完成了工作。


这是关于一次性迁移吗?之后您只会使用Git,还是您想从Git克隆提交回SVN? - Vampire
4个回答

15

那个版本不适用于Xenial...除了从源代码编译之外,还有其他的解决方法吗? - cauchi
6
以防有人遇到与我相同的问题(非常庞大的代码仓库,Ubuntu Xenial系统):请持续执行fetch命令,直到完全获取所有代码仓库。不用担心可能出现的信号11错误,只需要一直执行fetch即可。 - cauchi
2
在xenial中,您可以使用ppa存储库安装更新的libsvn-perl,请查看:https://launchpad.net/~dominik-stadler/+archive/ubuntu/subversion-1.9 - epineda
@cauchy 对于大多数仓库都可以工作,但是在一个 SVN 仓库中有一个特定的提交会每次创建“信号11”,因此迁移无法继续。通过更新到由 @epineda 链接的 PPA 中的库,问题得以解决。谢谢! - Dolanor

3
git-svn不是用于一次性转换存储库或存储库部分的正确工具,它是一个伟大的工具,如果你想使用Git作为现有SVN服务器的前端,但对于一次性转换,你不应该使用git-svn,而应该使用更适合这种情况的svn2git
有许多称为svn2git的工具,其中最好的可能是来自https://github.com/svn-all-fast-export/svn2git的KDE工具。我强烈建议使用那个svn2git工具。这是我知道的最好的工具,非常灵活,可以使用其规则文件做任何你想做的事情。
您将能够轻松配置svn2git的规则文件以产生您想要的结果。
如果您对存储库的历史记录不确定,请使用http://blog.hartwork.org/?p=763中的svneverever工具来调查迁移到Git时的SVN存储库的历史记录。
尽管git-svn更容易入手,但以下是使用KDE svn2git而不是git-svn更好的进一步原因,除了其灵活性:
  • 使用svn2git(如果使用正确)可以更好、更干净地重建历史记录,特别是对于具有分支和合并等更复杂历史记录的情况。
  • 标记是真正的标记,而不是Git中的分支。
  • 使用git-svn,标记包含一个额外的空提交,这也使它们不是分支的一部分,因此默认情况下只有指向已获取的分支的标记也会被获取。使用正确的svn2git标记在应该出现的地方。
  • 如果您在SVN中更改了布局,则可以轻松配置svn2git,而使用git-svn最终会丢失历史记录。
  • 使用svn2git,您还可以轻松将一个SVN存储库拆分为多个Git存储库,或将同一SVN根目录中的多个SVN存储库合并为一个Git存储库。
  • 使用正确的svn2git进行转换比使用git-svn快得多。
您看,有许多理由说明为什么git-svn不如KDE svn2git优越。 :-)

嗨Vampire。我很感激你的回答。非常感谢。然而,除了我在最初的问题中描述的svn克隆执行时遇到的初始问题外,其余部分对我来说看起来相当不错。创建的历史记录保留了所有内容,就像在SVN中一样。标签被创建为分支或标签,无论您喜欢哪种,请参见:http://www.sailmaker.co.uk/blog/2013/05/05/migrating-from-svn-to-git-preserving-branches-and-tags-3 对于其他部分,我不确定,但我想说,通过使用生成的本地存储库进行一些操作,也可以将其黑客化以加入或拆分SVN存储库。 - daniel sp
Git几乎是全能的。当然,您可以以任何可想象的方式操作存储库,包括克服git-svn的一些缺点。如果您喜欢这种方式,请随意。 :-) 只是分享我的经验。 - Vampire
svn2git是一个不错的封装器,但它也使用了svn-git,因此segfault问题仍然存在。例如: #svn2git MY_URL_REMOVED 错误:git-svn信号11中断 命令失败: git svn init --prefix = svn / -no-metadata --trunk ='trunk' --tags ='tags' --branches ='branches'MY_URL_REMOVED - Bgs
请再仔细阅读我的回答。你所说的 svn2git 不是我所说的那个,正如我在回答中解释的那样。我所说的是一个完全不同和独立的工具,不依赖于 git-svn。;-) - Vampire

1
我升级到 macOS BigSur版本11.0.1 后遇到了同样的问题,之前是 Catalina。我使用brew并在操作系统升级后运行了brew upgradebrew upgrade 安装了最新版的PERL,并符号链接/usr/local/bin/perl,同时将git升级到2.29.2。以下步骤解决了我的问题:
  1. 使用which perl在终端中检查perl路径
  2. 检查/usr/local/Cellar/git/2.29.2/libexec/git-core/git-svn目录下的git-svn脚本指向的perl版本(第一行)是否与步骤1中的版本相同,如果不同则更新

在我的情况下,which perl输出的是/usr/local/bin/per,但是git-svn脚本中的perl指向了/usr/bin/perl。将此路径更改为/usr/local/bin/per即可消除错误。


0

我尝试升级git甚至subversion,但错误仍然存在。所以我将我的Ubuntu从16.04升级到18.04,错误消失了。现在git svn --version的输出为:

git-svn version 2.19.2 (svn 1.9.7)

我们还在适应18.04,所以如果您担心的话,请不要升级。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接