Первое, что нужно сделать, это отладить команду 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
/usr/local/Cellar/git
-> обновить git
через Homebrew, например.
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
or:
sudo dtruss -fn git-svn
Чтобы определить, какой git-svn
вызывается, вы можете попробовать:
sudo /usr/bin/newproc.d
sudo fs_usage -f exec | grep git
person
kenorb
schedule
18.03.2016
brew upgrade git
) — были исправления, связанные с Yosemite, в brew - person Mykola Gurov   schedule 30.01.2015git svn --version
? Вы должны сделать это в репозитории git, неважно в каком. - person Schwern   schedule 30.01.2015