OSX 10.10 yosemite beta auf git pull: git-sh-setup: Keine solche Datei oder kein solches Verzeichnis

90

Nach dem Upgrade auf OSX 10.10 Yosemite Beta wird beim Ausführen git pullder folgende Fehler zurückgegeben:

/ Library / Developer / CommandLineTools / usr / libexec / git-core / git-pull: Zeile 11: git-sh-setup: Keine solche Datei oder kein solches Verzeichnis

Ich habe das referenzierte Git-Core-Verzeichnis überprüft und die Datei git-sh-setup.sh ist dort.

Andere Git-Befehle funktionieren genau wie erwartet

Meghaphon
quelle
3
Ich habe auch dieses Problem, außer mit git stash. Ich werde Sie wissen lassen, wenn ich eine Lösung finde
Cadlac
Hatte nur dieses Problem mit zsh ... git schien gut zu funktionieren, wenn es von Bash ausgeführt wurde. Zsh verwandt?
Zeekay
12
Dies war ein Fehler in iTerm2 mit zsh. iTerm2 hat es in seiner neuesten Version (v1.0.0.20140629)
behoben

Antworten:

100

Ich denke, die sauberste Lösung dafür ist vorerst, den anfänglichen Befehl in Ihrer iTerm-Sitzung so zu ändern

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

Dies behebt das Problem für mich.

Ein weiterer Datenpunkt für die Analyse des Problems: Es scheint, dass in 10.10 mehrere Kopien der Umgebungsvariablen PATH vorhanden sind und Unterschalen die zweite Kopie zu bevorzugen scheinen.

Sie können dies reproduzieren, indem Sie eine beliebige Kakaoanwendung auf der Konsole starten, wie sie von iTerm gestartet wurde. Sie erhalten eine Warnung, die folgendermaßen aussieht:

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

Ich glaube, dass dies ein Problem in 10.10 und nicht in iTerm ist, aber etwas, das iTerm tut, bewirkt, dass es sich manifestiert (dies passiert nicht in Terminal.app).

Update : Dies wird dadurch verursacht, dass iTerm "interessante" Dinge für die Umgebung tut. Aktualisieren Sie auf die offizielle Version von iTerm 2.0, um dieses Problem zu beheben.

Pilif
quelle
6
Dies sollte die richtige Antwort sein, erstaunliche Lösung. Allerdings habe ich den Befehl auf gesetzt /usr/bin/login -f $USER, nur damit ich das gleiche Profil auf mehreren Konten haben kann :)
Cadlac
12
Anscheinend entfernt bash alle duplizierten Umgebungsvariablen. Wenn Sie den Befehl auf /bin/bash -c /bin/zshdiesen Befehl setzen, bleiben andere Umgebungsvariablen erhalten, z $SSH_AUTH_SOCK.
Cypheon
2
Dies hat das Problem für mich auf die bisher sauberste Weise behoben. Vielen Dank!
Meghaphon
2
Dies behebt Git. Aber wann immer ich ssh mit meiner id_rsa.pub verwenden muss, wurde ich gebeten, die Passphrase einzugeben. Ich musste dies weder vor dem Ändern des ersten Befehls noch in Terminal.app tun. Irgendeine Idee?
ZeR0
5
Ich denke /bin/bash -c /bin/zshist besser als /usr/bin/login -f <your user name>, weil es die Zeichenkodierung behält. /usr/bin/login -f <your user name>Ich habe meine Codierung verloren und kann meine Dateien nicht wie gewohnt anzeigen.
Alpha Liu
35

Ich glaube, dies ist ein Fehler in iTerm bei der Verwendung von zsh. Sie rufen absichtlich nicht / usr / bin / login auf und verwenden execle nicht, um die Umgebungsvariablen so zu löschen, wie sie sein sollten.

Jeremy Huddleston Sequoia
quelle
1
Wow, ich denke du hast recht. Ich habe stundenlang versucht, verschiedene Git-Fixes zum Laufen zu bringen, und es stellt sich heraus, dass der Wechsel von iTerm2 mit zsh zu Yosemites Standardterminal (immer noch mit zsh) hervorragend funktioniert. Wie haben Sie das gefunden?
Jbnunn
8
Nun, dies ist die spezifischste Gruppe von Menschen, die es je gab ... Was für ein Randfall.
Drew
2
Das war eine sehr gute Analyse. Eine gute Problemumgehung besteht darin, den Anfangsbefehl in iTerm auf / usr / bin / login -f <Ihr Benutzername> zu setzen.
Pilif
13
Eine andere Problemumgehung besteht darin, den Login-Shell-Befehl in iTerm auf/bin/bash -c /bin/zsh
Vince
1
Der Wechsel von login shellzu commandim Abschnitt "Einstellungen"> "Profil"> "Allgemein" und die Verwendung, /bin/bash -c /bin/zahwie von @Sorenly vorgeschlagen, haben dieses Problem behoben!
Jlmakes
20

Das Herunterladen der neuesten Version von iTerm2 hat dies für mich behoben!

Marthyn Olthof
quelle
1
Wenn Sie es lösen möchten, ohne zu beweisen, dass Sie ein Technikfreak sind, tun Sie dies einfach. Vielen Dank an Marthyn ...
Krishnaprasad Varma
Wie die Kommentare unten sagten, scheint es iTerm und zsh zusammen zu sein, die verhindern, dass Git Pulls funktionieren. Wenn Sie zu iTerm2 gehen, wird das Problem behoben.
MikeHoss
4
Um @MikeHoss zu verdeutlichen, funktioniert iTerm2 Version 1.0.x nicht, iTerm2 Version 2.0.x jedoch. Beide sind iTerm2, aber die Version ist wichtig.
Kevin Cooper
16

Eine andere Lösung, ändern Sie Ihr iTerm2

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

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

chmod +x iTerm

Getan.

Viel Spaß mit Ihrem iTerm2 mit Yosemite!

Feng
quelle
iTerm2 ist das Problem und dies ist eine der besten Lösungen für das Problem. Ein großes Lob.
ocodo
Ich hatte dieses Problem sogar in der öffentlichen Version 10.10, und dies hat es behoben. Danke Feng!
Ash Furrow
13

Als temporäre Lösung habe ich die Git-Pull-Linien 11, 12 und 336 wie folgt geändert:

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

Dies behebt Git-Pull vorerst, aber ich bin mir sicher, dass es eine bessere Lösung gibt.

Ubiquill
quelle
2
Ich musste auch wie 231 zu. /usr/local/Cellar/git/2.0.0/libexec/git-core/git-parse-remote
Keith Smiley
2
Für den Fall, dass ich dies ändern musste, habe ich meine so eingerichtet, dass sie auf $GIT_PATH/git-sh-setupusw. zeigt.
TheJF
1
Ich bekomme /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?nach dem Anwenden dieses Fixes jemand eine Idee, was zu tun ist?
Drew
@ Andrew Das ist hässlich, aber ich musste das Git-Sh-Setup durchlaufen und alle gitdurch ersetzen /usr/local/bin/git. Es gab auch einige Fälle von gitGit-Pull, die ersetzt werden mussten
jbnunn
3

Hier ist eine vorübergehende Korrektur (unter der Annahme von Homebrew und Git 2.0.0), wenn Sie Git benötigen, um zu arbeiten, bevor eine offizielle Korrektur veröffentlicht wird. Ich habe zwei Shell-Variablen eingerichtet:

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"

... und dann Instanzen von gitdurch entsprechende absolute Links ersetzt. Sie können die folgenden Listen verwenden, um dasselbe zu tun:

  • Ersetzen Sie /usr/local/Cellar/git/2.0.0/libexec/git-core/git-sh-setup/ durch git-sh-setup
  • Ersetzen Sie /usr/local/Cellar/git/2.0.0/libexec/git-core/git-stash/ durch git-stash
  • Ersetzen Sie /usr/local/Cellar/git/2.0.0/libexec/git-core/git-pull/ durch git-pull

Dies ist sicher ein Hack, aber es wird Sie in Schwung bringen.

BEARBEITEN: Stellen Sie sicher, dass Sie sich die Antwort von @pilif ansehen, bevor Sie dies tun ...

jbnunn
quelle
1

Die Problemumgehung von Ubiquill gilt auch für die Git-Rebase (und vermutlich auch für alle anderen Funktionen, die nicht funktionieren). In diesem Fall müssen die Zeilen 47 und 48 durch die folgenden * ersetzt werden:

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

* Dieser Pfad setzt voraus, dass Sie git mit Homebrew installiert haben und sich in /usr/local/Cellar/git/2.0.0/ befindet.

Ferchak
quelle
1

Bearbeiten Sie Ihre Git-Pull-Datei und fügen Sie diese Zeile darüber (direkt nach dem Kommentarblock).

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

Oder kopieren Sie einfach und fügen Sie dies in Ihr Terminal ein:

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

Update: Wie von pilif angenommen , wird seit dem letzten iTerm2-Update (1.0.0.20140629) git-pullohne diese PATHÜberschreibung ordnungsgemäß ausgeführt .

Pyrou
quelle
Dies scheint die einzige Lösung zu sein, die in meiner Konfiguration einen Schritt nach vorne macht. Nach dem Hinzufügen der PATH-Zeile wird dieser Fehler angezeigt, wenn ich versuche, PULL: git: 'credential-osxkeychain' ist kein git-Befehl. Siehe 'git --help'. Irgendwelche Ideen?
Kiks73
0

UPDATE: funktioniert immer noch nicht mit der unten genannten Version, mein Fehler. Git Push funktioniert Git Pull nicht.

Es scheint mir, dass das Problem von Apple mit Mac OS X Yosemite 10.10 ( 14A329r ) behoben wurde . Ich bin auf dem allgemeinen Beta Yosemite Kanal (nicht Entwickler). Git push /ziehen funktioniert wieder wie erwartet ohne Änderungen.

Frank Lämmer
quelle
Nein, ich habe doppelte Umgebungsvariablen auf 14A329r, daher wurde dies bei diesem Build nicht behoben.
Zr40
@ Zr40 thx. Du hast recht. irgendwie funktioniert Git Push jetzt? für mich aber Git Pull funktioniert immer noch NICHT.
Frank Lämmer