git svn clone murió de la señal 11 en OSX

Estoy intentando migrar un proyecto de svn a git. Estaba usando el package osx svn, pero también intenté instalarlo con homebrew. Sigo teniendo el mismo error.

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

Información de versión:

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

Estoy corriendo Yosemite.

git svn ejecuta git-svn que es un progtwig de Perl que usa enlaces a libsvn y esas vinculaciones son delicadas. Si Perl cambia, o SVN cambia, eso podría causar una segfault. Ambos podrían suceder en una actualización del sistema operativo.

Averigua qué versión de los enlaces SVN usa tu git. Esto es lo que obtengo para OS X 10.10.1

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

Pruebe brew upgrade git como lo sugiere @MykolaGurov en los comentarios. Parece que hay correcciones para 10.10 y git-svn . También puede probar brew reinstall subversion --with-perl para reinstalar los enlaces de Perl.

O use el OS X proporcionado / usr / bin / git que se comstackrá con el sistema operativo proporcionado SVN y Perl.

O pruebe MacPorts , lo uso y su git-svn funciona. port install git +svn .

Lo primero que hay que hacer es depurar el command git para ver en qué componente falla al agregar GIT_TRACE=1 , por ej.

 $ 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 

y vuelva a ejecutar el último command en el repository corrupto que muestra que el locking ocurrió en git-svn binary.

Para hacer eso, necesitas identificar dónde tienes git-svn binary, por ej.

 $ 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 

Si tiene varios binarys de git-svn , para saber cuál se usa, ejecute:

 sudo fs_usage -f exec | grep git 

en otra terminal antes de ejecutar nuevamente el command git defectuoso.

Una vez que haya identificado qué git-svn ejecuta, ejecútelo directamente como:

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

y es más probable que se bloquee sin importar qué parámetro especifique, de lo contrario especifique como se muestra en la salida de rastreo.

A veces puede ser un enlace simbólico, así que compruebe dónde apunta, por ejemplo:

 $ 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' 

Si ese es el caso, cambie el enlace simbólico por el que no está bloqueando, por ej.

 $ 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' 

Alternativamente, identifique a qué package pertenece su git-svn y actualícelo en consecuencia, p. Ej.

  • /Applications/Xcode.app / /Applications/Xcode.app -> actualizar Xcode,
  • /Applications/GitHub.app -> actualiza la aplicación GitHub
  • /usr/local/Cellar/git -> actualizar git través de Homebrew, por ejemplo

     brew upgrade git 

    Si Homebrew se queja de los conflictos entre files, ejecuta:

     brew link --overwrite git 

Si aún se bloquea después de la actualización, utilice una versión diferente (como se mencionó anteriormente) que no se cuelgue, por ejemplo

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

Si eso funciona para usted, agregue a su PATH y luego use el command git-svn lugar, o agregue un alias, por ejemplo:

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

Si tiene alguna dependencia faltante para el nuevo git-svn , instale Git::SVN ejecutando:

 sudo cpan install Git::SVN 

Depuración

Si lo anterior no será de ayuda, puede depurarlo aún más. Aquí hay algunas sugerencias para ejecutar en un terminal separado, luego en ejecutar el command que falla:

 sudo dtruss -fn git 

o:

 sudo dtruss -fn git-svn 

Para identificar a qué git-svn se llama, puede intentar:

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