首先要做的是通过添加GIT_TRACE=1
来调试git
命令,以查看它在哪个组件上失败,例如:
$ 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
-> upgrade Xcode,
/Applications/GitHub.app
-> upgrade GitHub app
/usr/local/Cellar/git
-> upgrade git
via Homebrew, e.g.
brew upgrade git
If Homebrew will complain about the file conflicts, then run:
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
brew upgrade git
)-因为brew中有与yosemite相关的修复(https://github.com/Homebrew/homebrew/issues/31310)。 - Mykola Gurovgit svn --version
显示什么?你必须在 git 仓库中执行此命令,无论是哪个仓库都可以。 - Schwern