OSX 10.10 yosemite beta en git pull: git-sh-setup: no existe tal archivo o directorio

90

Después de actualizar a OSX 10.10 Yosemite Beta, la ejecución git pulldevuelve el siguiente error:

/ Library / Developer / CommandLineTools / usr / libexec / git-core / git-pull: línea 11: git-sh-setup: No existe tal archivo o directorio

Revisé el directorio git-core al que se hace referencia y el git-sh-setup.sh está allí.

Otros comandos de git funcionan exactamente como se esperaba

megafono
fuente
3
También tengo este problema, excepto con git stash. Te haré saber si encuentro una solución
cadlac
Solo estaba teniendo este problema con zsh ... git parecía funcionar bien cuando se ejecutaba desde bash. ¿Relacionado con Zsh?
zeekay
12
Este fue un error en iTerm2 con zsh. iTerm2 lo arregló en su última versión (v1.0.0.20140629)
rds

Respuestas:

100

Creo que la solución más limpia para esto por ahora es cambiar el comando inicial en su sesión de iTerm para que sea

/usr/bin/login -f <your user name>

Esto me soluciona el problema.

Otro dato para analizar el problema: parece que en 10.10, existen múltiples copias de la variable de entorno PATH y las subcapas parecen preferir la segunda copia.

Puede reproducir esto iniciando cualquier aplicación Cocoa en la consola tal como la lanzó iTerm. Recibirá una advertencia similar a esta:

2014-06-04 19:23:09.859 gitx[14676:362580] *** -[NSProcessInfo environment]: Warning: duplicate definition for key 'PATH' found in environment -- subsequent definitions are ignored.  The first definition was '(the path I have configured in my shell)', the ignored definition is '/usr/bin:/bin:/usr/sbin:/sbin'.

Creo que esto es un problema en 10.10 y no en iTerm, pero algo que está haciendo iTerm está haciendo que se manifieste (esto no sucede en Terminal.app)

Actualización : Esto se debe a que iTerm hace cosas "interesantes" para el medio ambiente. Actualice a la versión oficial de iTerm 2.0 para que este problema desaparezca.

pilif
fuente
6
Esta debería ser la respuesta correcta, una solución asombrosa. Sin embargo, configuré el comando en /usr/bin/login -f $USER, solo para poder tener el mismo perfil en varias cuentas :)
cadlac
12
Aparentemente, bash elimina todas las variables de entorno duplicadas. Por lo tanto, si configura el comando /bin/bash -c /bin/zsh, conservará otras variables de entorno, por ejemplo $SSH_AUTH_SOCK.
cypheon
2
Esto solucionó el problema para mí de la manera más limpia hasta ahora. ¡Muchas gracias!
megafonía
2
Esto corrige git. Pero siempre que necesito usar ssh con mi id_rsa.pub, se me pidió que ingresara la frase de contraseña. No tuve que hacer esto antes de cambiar el comando inicial, ni en Terminal.app. ¿Alguna idea?
ZeR0
5
Creo que /bin/bash -c /bin/zshes mejor que /usr/bin/login -f <your user name>, porque mantiene la codificación de caracteres. /usr/bin/login -f <your user name>Perdí mi codificación y no puedo mostrar mis archivos como de costumbre.
Alpha Liu
35

Creo que esto es un error en iTerm cuando se usa zsh. Deliberadamente no invocan / usr / bin / login, y no usan execle para borrar las variables de entorno como deberían ser.

Jeremy Huddleston Sequoia
fuente
1
Wow, creo que tienes razón. He pasado horas tratando de que funcionen varias correcciones de Git, y resulta que cambiar de iTerm2 w / zsh a la Terminal predeterminada de Yosemite (todavía con zsh) funciona muy bien. ¿Cómo encontraste esto?
jbnunn
8
Bueno, este es el grupo de personas más específico que jamás haya existido ... Qué caso tan extremo.
Drew
2
ese fue un muy buen análisis. Entonces, una buena solución es establecer el comando inicial en iTerm en / usr / bin / login -f <su nombre de usuario>.
Pilif
13
Otra solución es establecer el comando shell de entrada en iTerm a/bin/bash -c /bin/zsh
Vince
1
Cambiando de login shella commanden la sección Preferencias> Perfil> General, y usando /bin/bash -c /bin/zahcomo sugirió @Sorenly, ¡arregló esto!
jlmakes el
20

¡La descarga de la versión más reciente de iTerm2 solucionó esto para mí!

Marthyn Olthof
fuente
1
Si quieres resolverlo sin demostrar que eres un técnico ..., haz esto. Gracias a Marthyn ...
Krishnaprasad Varma
Como se dice en los comentarios a continuación, parece ser iTerm y zsh juntos lo que evita que git pulls funcionen. Ir a iTerm2 lo soluciona.
MikeHoss
4
Para aclarar a @MikeHoss, iTerm2 versión 1.0.x no funciona, pero iTerm2 versión 2.0.x sí. Ambos son iTerm2, pero lo que importa es la versión.
Kevin Cooper
16

Otra solución, modifica tu iTerm2

cd /Applications/iTerm.app/Contents/MacOS
mv iTerm iTerm-bin

cat > iTerm <<EOF
#!/bin/sh
unset PATH
\${0}-bin
EOF

chmod +x iTerm

Hecho.

¡Disfruta de tu iTerm2 con Yosemite!

Feng
fuente
iTerm2 es el problema y esta es una de las mejores soluciones al problema. Prestigio.
ocodo
Estaba experimentando este problema incluso en la versión pública 10.10, y esto lo solucionó. ¡Gracias Feng!
Ash Surrow
13

Como solución temporal, modifiqué las líneas 11, 12 y 336 de git-pull para que fueran:

. /usr/local/Cellar/git/2.0.0/libexec/git-core/git-sh-setup

. /usr/local/Cellar/git/2.0.0/libexec/git-core/git-sh-i18n

eval="/usr/local/Cellar/git/2.0.0/libexec/git-core/git-merge $diffstat $no_commit $verify_signatures $edit $squash $no_ff $ff_only"

Esto corrige git-pull por ahora, pero estoy seguro de que hay una solución mejor.

Ubiquill
fuente
2
También tuve que cambiar como 231 a. /usr/local/Cellar/git/2.0.0/libexec/git-core/git-parse-remote
Keith Smiley
2
En caso de que necesitaba cambiar esto, he creado mina hasta el punto que $GIT_PATH/git-sh-setup, etc
TheJF
1
Estoy recibiendo /usr/local/Cellar/git/2.0.0/libexec/git-core/git-sh-setup: line 334: git: command not found fatal: 'pull' appears to be a git command, but we were not able to execute it. Maybe git-pull is broken?Después de aplicar esta solución, ¿alguien tiene una idea de qué hacer?
Drew
@Andrew Esto es feo pero tuve que pasar por git-sh-setup y reemplazar todo gitcon /usr/local/bin/git. También hubo algunos casos de gitin git-pull que tuvieron que ser reemplazados
jbnunn
3

Aquí hay una solución temporal (asumiendo Homebrew y Git 2.0.0) si necesita que Git funcione antes de que salga una solución oficial. Configuré dos variables de shell:

export GIT_PATH="/usr/local/Cellar/git/2.0.0/bin"
export GIT_CORE_PATH="/usr/local/Cellar/git/2.0.0/libexec/git-core"

... y luego reemplazó instancias de gitcon enlaces absolutos apropiados. Puede utilizar las siguientes Gists para hacer lo mismo:

  • Reemplace /usr/local/Cellar/git/2.0.0/libexec/git-core/git-sh-setup/ con git-sh-setup
  • Reemplace /usr/local/Cellar/git/2.0.0/libexec/git-core/git-stash/ con git-stash
  • Reemplace /usr/local/Cellar/git/2.0.0/libexec/git-core/git-pull/ con git-pull

Este es un truco seguro, pero te pondrá en marcha.

EDITAR: asegúrese de mirar la respuesta de @pilif antes de hacer esto ...

jbnunn
fuente
1

La solución alternativa de Ubiquill también se aplica a git rebase (y presumiblemente a cualquier otra función que no funcione). En ese caso, requiere reemplazar las líneas 47 y 48 con lo siguiente *:

. /usr/local/Cellar/git/2.0.0/libexec/git-core/git-sh-setup
. /usr/local/Cellar/git/2.0.0/libexec/git-core/git-sh-i18n

* Esta ruta asume que tienes git instalado con homebrew, y vive dentro de /usr/local/Cellar/git/2.0.0/.

ferchak
fuente
1

Edite su archivo git-pull y agregue esta línea encima (justo después del bloque de comentarios)

PATH="$(dirname $0):$PATH"

O simplemente copia y pega esto en tu terminal:

ed -s $(which git-pull) <<< $'6i\nPATH="$(dirname $0):$PATH"\n.\nwq'

Actualización: como presume pilif , desde la última actualización de iTerm2 (1.0.0.20140629), se git-pullejecuta correctamente sin esta PATHanulación.

pyrou
fuente
Esta parece ser la única solución para dar un paso adelante en mi configuración. Después de agregar la línea PATH, obtengo este error cuando intento PULL: git: 'credential-osxkeychain' no es un comando git. Consulte 'git --help'. ¿Algunas ideas?
kiks73
0

ACTUALIZACIÓN: todavía no funciona con la versión mencionada a continuación, mi error. Git push funciona Git pull no lo hace.

Me parece que Apple ha solucionado el problema con Mac OS X Yosemite 10.10 ( 14A329r ). Estoy en el canal Beta general de Yosemite (no desarrollador). Git push /Halar funciona como se esperaba de nuevo sin modificaciones.

Frank Lämmer
fuente
No, estoy experimentando variables de entorno duplicadas en 14A329r, por lo que no se ha corregido en esa compilación.
Zr40
@ Zr40 gracias. tienes razón. ¿De alguna manera Git push funciona ahora? para mí, pero Git pull todavía NO funciona.
Frank Lämmer