OSX 10.10 yosemite beta sur git pull: git-sh-setup: aucun fichier ou répertoire de ce type

90

Après la mise à niveau vers OSX 10.10 Yosemite Beta, l'exécution git pullrenvoie l'erreur suivante:

/ Library / Developer / CommandLineTools / usr / libexec / git-core / git-pull: ligne 11: git-sh-setup: aucun fichier ou répertoire de ce type

J'ai vérifié le répertoire git-core référencé et le git-sh-setup.sh est là.

Les autres commandes git fonctionnent exactement comme prévu

méghaphone
la source
3
J'ai aussi ce problème, sauf avec git stash. Je vous ferai savoir si je trouve une solution
cadlac
Avait seulement ce problème avec zsh ... git semblait fonctionner correctement lorsqu'il était exécuté à partir de bash. Zsh lié?
zeekay
12
C'était un bug dans iTerm2 avec zsh. iTerm2 l'a corrigé dans sa dernière version (v1.0.0.20140629)
rds

Réponses:

100

Je pense que la solution la plus propre pour cela pour le moment est de changer la commande initiale de votre session iTerm pour qu'elle soit

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

Cela résout le problème pour moi.

Un autre point de données pour l'analyse du problème: il semble que dans 10.10, plusieurs copies de la variable d'environnement PATH existent et les sous-shell semblent préférer la deuxième copie.

Vous pouvez reproduire cela en lançant n'importe quelle application cacao sur la console lancée par iTerm. Vous recevrez un avertissement qui ressemble à ceci:

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

Je pense que c'est un problème dans 10.10 et non dans iTerm, mais quelque chose que fait iTerm le fait se manifester (cela ne se produit pas dans Terminal.app)

Mise à jour : Ceci est dû au fait qu'iTerm fait des choses "intéressantes" à l'environnement. Mettez à jour la version officielle d'iTerm 2.0 pour résoudre ce problème.

pilif
la source
6
Cela devrait être la bonne réponse, une solution incroyable. Cependant, j'ai défini la commande sur /usr/bin/login -f $USER, juste pour pouvoir avoir le même profil sur plusieurs comptes :)
cadlac
12
Apparemment, bash supprime toutes les variables d'environnement dupliquées. Donc, si vous définissez la commande, /bin/bash -c /bin/zshcela conservera d'autres variables d'environnement, par exemple $SSH_AUTH_SOCK.
cypheon
2
Cela a résolu le problème pour moi de la manière la plus propre à ce jour. Merci beaucoup!
meghaphone
2
Cela corrige git. Mais chaque fois que j'ai besoin d'utiliser ssh avec mon id_rsa.pub, on m'a demandé d'entrer la phrase de passe. Je n'ai pas eu à faire cela avant de modifier la commande initiale, ni dans Terminal.app. Une idée?
ZeR0
5
Je pense que /bin/bash -c /bin/zshc'est mieux que /usr/bin/login -f <your user name>, car il conserve le codage des caractères. /usr/bin/login -f <your user name>perdu mon encodage et je ne peux pas afficher mes fichiers normalement.
Alpha Liu
35

Je crois que c'est un bogue dans iTerm lors de l'utilisation de zsh. Ils n'appellent délibérément pas / usr / bin / login, et ils n'utilisent pas execle pour effacer les variables d'environnement comme elles devraient l'être.

Jeremy Huddleston Séquoia
la source
1
Wow je pense que tu as raison. J'ai passé des heures à essayer de faire fonctionner divers correctifs Git, et il s'avère que le passage d'iTerm2 w / zsh au terminal par défaut de Yosemite (toujours avec zsh) fonctionne très bien. Comment avez-vous trouvé cela?
jbnunn
8
Eh bien, c'est le groupe de personnes le plus spécifique jamais ... Quel cas de pointe.
Match
2
c'était une très bonne analyse. Une bonne solution de contournement consiste donc à définir la commande initiale dans iTerm sur / usr / bin / login -f <votre nom d'utilisateur>.
pilif
13
Une autre solution de contournement consiste à définir la commande shell de connexion dans iTerm sur/bin/bash -c /bin/zsh
Vince
1
Passer de login shellà commanddans la section Préférences> Profil> Général et utiliser /bin/bash -c /bin/zahcomme @Sorenly l'a suggéré, a résolu ce problème!
jlmakes
20

Le téléchargement de la dernière version d'iTerm2 a résolu ce problème pour moi!

Marthyn Olthof
la source
1
Si vous voulez le résoudre sans prouver que vous êtes un technicien ..., faites-le. Merci à Marthyn ...
Krishnaprasad Varma
Comme le disent les commentaires ci-dessous, il semble que ce soit iTerm et zsh ensemble qui empêche git pulls de fonctionner. Aller à iTerm2 le corrige.
MikeHoss
4
Pour clarifier @MikeHoss, iTerm2 version 1.0.x ne fonctionne pas, mais iTerm2 version 2.0.x le fait. Les deux sont iTerm2, mais c'est la version qui compte.
Kevin Cooper
16

Autre solution, modifiez votre iTerm2

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

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

chmod +x iTerm

Terminé.

Profitez de votre iTerm2 avec Yosemite!

Feng
la source
iTerm2 est le problème et c'est l'une des meilleures solutions au problème. Gloire.
ocodo
Je rencontrais ce problème même sur la version publique 10.10, et cela l'a résolu. Merci Feng!
Ash Sillon
13

En tant que solution temporaire, j'ai modifié les lignes git-pull 11, 12 et 336 pour être:

. /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"

Cela corrige git-pull pour le moment, mais je suis sûr qu'il existe une meilleure solution.

Ubiquill
la source
2
J'ai aussi dû changer comme 231 pour. /usr/local/Cellar/git/2.0.0/libexec/git-core/git-parse-remote
Keith Smiley
2
Au cas où je $GIT_PATH/git-sh-setup
devrais
1
Je reçois /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?Après avoir appliqué ce correctif, quelqu'un a une idée de ce qu'il faut faire?
Match
@Andrew C'est moche mais j'ai dû passer par git-sh-setup et tout remplacer gitpar /usr/local/bin/git. Il y avait également quelques instances de gitin git-pull qui ont dû être remplacées
jbnunn
3

Voici un correctif temporaire (en supposant Homebrew et Git 2.0.0) si vous avez besoin de Git pour fonctionner avant la sortie d'un correctif officiel. J'ai configuré deux variables 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"

... puis remplacé les instances de gitpar des liens absolus appropriés. Vous pouvez utiliser les Gists suivants pour faire de même:

  • Remplacez /usr/local/Cellar/git/2.0.0/libexec/git-core/git-sh-setup/ par git-sh-setup
  • Remplacez /usr/local/Cellar/git/2.0.0/libexec/git-core/git-stash/ par git-stash
  • Remplacez /usr/local/Cellar/git/2.0.0/libexec/git-core/git-pull/ par git-pull

C'est un hack à coup sûr, mais cela vous permettra de continuer.

EDIT: Assurez-vous de regarder la réponse de @pilif avant de faire cela ...

jbnunn
la source
1

La solution de contournement d'Ubiquill s'applique également à git rebase (et probablement à toutes les autres fonctions qui ne fonctionnent pas). Dans ce cas, il faut remplacer les lignes 47 et 48 par ce qui suit *:

. /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

* Ce chemin suppose que vous avez installé git avec homebrew et qu'il se trouve à l'intérieur de /usr/local/Cellar/git/2.0.0/.

ferchak
la source
1

Modifiez votre fichier git-pull et ajoutez cette ligne par-dessus (juste après le bloc de commentaire)

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

Ou copiez-collez ceci dans votre terminal:

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

Mise à jour: comme présumé par pilif , depuis la dernière mise à jour iTerm2 (1.0.0.20140629), git-pullexécutez correctement sans ce PATHremplacement.

pyrou
la source
Cela semble être la seule solution pour faire un pas en avant dans ma configuration. Après avoir ajouté la ligne PATH, j'obtiens cette erreur lorsque j'essaye de PULL: git: 'credential-osxkeychain' n'est pas une commande git. Voir 'git --help'. Des idées?
kiks73
0

MISE À JOUR: ne fonctionne toujours pas avec la version mentionnée ci-dessous, mon erreur. Git push fonctionne Git pull ne fonctionne pas.

Il me semble que le problème a été résolu par Apple avec Mac OS X Yosemite 10.10 ( 14A329r ). Je suis sur le canal général Beta Yosemite (pas développeur). Git push /tirer fonctionne à nouveau comme prévu sans aucune modification.

Frank Lämmer
la source
Non, je rencontre des variables d'environnement dupliquées sur 14A329r, donc cela n'a pas été corrigé sur cette version.
Zr40
@ Zr40 thx. vous avez raison. en quelque sorte Git push fonctionne maintenant? pour moi, mais Git pull ne fonctionne toujours pas.
Frank Lämmer