git svn clone在OSX上死于信号11

时间:2015-01-30 01:52:43

标签: git svn git-svn osx-yosemite

我正在尝试将项目从svn迁移到git。我使用的是osx svn软件包,但我也尝试使用自制软件安装。我一直得到同样的错误。

git svn clone http://myserver/myrepo
error: git-svn died of signal 11

版本信息:

git --version
git version 2.2.1

svn --version
svn, version 1.7.17 (r1591372)
   compiled Sep 18 2014, 13:06:44

我正在运行优胜美地。

3 个答案:

答案 0 :(得分:11)

git svn执行git-svn这是一个Perl程序,它使用绑定到libsvn并且那些绑定很敏感。如果Perl更改或SVN更改,则可能导致段错误。两者都可能发生在操作系统升级中。

找出您的git使用的SVN绑定版本。这是我得到的OS X 10.10.1

$ /usr/bin/git svn --version
git-svn version 1.9.3 (Apple Git-50) (svn 1.7.17)

在评论中按照@MykolaGurov的建议尝试brew upgrade git。似乎有fixes for 10.10 and git-svn。您也可以尝试brew reinstall subversion --with-perl重新安装Perl绑定。

或者使用OS X提供的/ usr / bin / git,它将使用操作系统提供的SVN和Perl构建。

或尝试MacPorts,我使用它并且它的git-svn有效。 port install git +svn

答案 1 :(得分:4)

首先要做的是调试git命令,通过添加GIT_TRACE=1来查看失败的组件,例如

$ GIT_TRACE=1 git svn clone https://example.com/svn/foo/ foo
21:12:40.239238 git.c:557               trace: exec: 'git-svn' 'clone' 'https://example.com/svn/foo/ foo/' 'foo'
21:12:40.240158 run-command.c:347       trace: run_command: 'git-svn' 'clone' 'https://example.com/svn/foo/ foo/' 'foo'
error: git-svn died of signal 11

并在损坏的存储库中重新运行最后一个命令,该命令显示崩溃发生在git-svn二进制文件中。

为了做到这一点,你需要确定你git-svn二进制文件的位置,例如

$ which -a git-svn
$ locate git-svn | grep git-svn$
/Applications/GitHub.app/Contents/Resources/git/libexec/git-core/git-svn
/Applications/SourceTree.app/Contents/Resources/git_local/libexec/git-core/git-svn
/Applications/Xcode.app/Contents/Developer/usr/libexec/git-core/git-svn
/Library/Developer/CommandLineTools/usr/libexec/git-core/git-svn
/usr/local/libexec/git-core/git-svn
/usr/local/Cellar/git/1.8.4.1/libexec/git-core/git-svn
/usr/local/Cellar/git/2.4.0/libexec/git-core/git-svn

如果您有多个git-svn二进制文件,要找出使用的二进制文件,请运行:

sudo fs_usage -f exec | grep git

在再次运行失败的git命令之前在另一个终端中。

一旦确定了您运行的git-svn,请直接运行,如:

/usr/local/libexec/git-core/git-svn ...
/usr/local/Cellar/git/2.4.0/libexec/git-core/git-svn 

并且无论您指定哪个参数,它都很可能会崩溃,否则请从跟踪输出中指定。

有时它可能是一个符号链接,因此请检查其指向的位置,例如:

$ stat /usr/local/libexec/git-core/git-svn
  File: ‘/usr/local/libexec/git-core/git-svn’ -> ‘/Applications/GitHub.app/Contents/Resources/git/libexec/git-core/git-svn’

如果是这种情况,请将符号链接更改为未崩溃的链接,例如。

$ ln -vfs /Applications/Xcode.app/Contents/Developer/usr/libexec/git-core/git-svn /usr/local/libexec/git-core/git-svn 
‘/usr/local/libexec/git-core/git-svn’ -> ‘/Applications/Xcode.app/Contents/Developer/usr/libexec/git-core/git-svn’

或者确定您的git-svn属于哪个包并进行相应升级,例如

  • /Applications/Xcode.app - >升级Xcode,
  • /Applications/GitHub.app - >升级GitHub app
  • /usr/local/Cellar/git - >通过Homebrew升级git,例如

    brew upgrade git
    

    如果Homebrew会抱怨文件冲突,请运行:

    brew link --overwrite git
    

如果升级后仍然崩溃,请使用不会崩溃的不同版本(如上所述),例如

/Applications/Xcode.app/Contents/Developer/usr/libexec/git-core/git-svn clone https://example.com/svn/foo/ foo

如果适用于您,请添加到PATH以及稍后使用git-svn命令,或添加别名,例如:

alias git-svn='/Applications/Xcode.app/Contents/Developer/usr/libexec/git-core/git-svn'

如果您有新的git-svn缺少任何依赖项,请运行以下命令安装Git::SVN

sudo cpan install Git::SVN

调试

如果上面没有帮助,您可以进一步调试它。以下是在单独的终端中运行的一些建议,然后运行失败的命令:

sudo dtruss -fn git

或:

sudo dtruss -fn git-svn

要确定调用哪个git-svn,您可以尝试:

  • sudo /usr/bin/newproc.d
  • sudo fs_usage -f exec | grep git

答案 2 :(得分:0)

我的情况不同。我在我的 svn 存储库的 https url 中指定了凭据。 删除凭据解决了问题。

我如何运行命令

/usr/bin/google-chrome: line 45: /dev/fd/62: No such file or directory
/usr/bin/google-chrome: line 46: /dev/fd/62: No such file or directory

删除了密钥/密码和命令。