Подтвердить что ты не робот

Git svn clone умер от сигнала 11 на OSX

Я пытаюсь перенести проект из svn в git. Я использовал пакет osx svn, но я также попытался установить с homebrew. Я продолжаю получать ту же ошибку.

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

Я запускаю Йосемити.

4b9b3361

Ответ 1

git svn выполняет git-svn, который является программой Perl, которая использует привязки к libsvn, и эти привязки оказываются обидчивыми. Если Perl изменится или SVN изменится, это может вызвать segfault. Оба могут произойти при обновлении ОС.

Узнайте, какая версия привязок SVN использует ваш git. Вот то, что я получаю для OS X 10.10.1

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

Попробуйте brew upgrade git, как это предложил @MykolaGurov в комментариях. Кажется, есть исправления для 10.10 и git -svn. Вы также можете попробовать brew reinstall subversion --with-perl переустановить привязки Perl.

Или используйте предоставленную OS X/usr/bin/ git, которая будет построена с ОС, предоставленной SVN и Perl.

Или попробуйте MacPorts, я использую его, и его git -svn работает. port install git +svn.

Ответ 2

Прежде всего, нужно отлаживать команду 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 → upgrade 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

Отладка

Если выше не поможет, вы можете отладить его еще больше. Вот несколько советов для запуска в отдельном терминале, затем выполните команду failing:

sudo dtruss -fn git

или

sudo dtruss -fn git-svn

Чтобы определить, какой вызов git-svn вызывается, вы можете попробовать:

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