OSX 10.10 yosemite beta su git pull: git-sh-setup: nessun file o directory di questo tipo


90

Dopo l'aggiornamento a OSX 10.10 Yosemite Beta, l'esecuzione git pullrestituisce il seguente errore:

/ Library / Developer / CommandLineTools / usr / libexec / git-core / git-pull: riga 11: git-sh-setup: nessun file o directory di questo tipo

Ho controllato la directory git-core di riferimento e git-sh-setup.sh è lì.

Altri comandi git funzionano esattamente come previsto


3
Sto riscontrando anche questo problema, tranne con git stash. Ti farò sapere se trovo una soluzione
— cadlac

Avevo solo questo problema con zsh ... git sembrava funzionare bene quando eseguito da bash. Zsh correlato?
— zeekay

12
Questo era un bug in iTerm2 con zsh. iTerm2 fissato nella sua ultima versione (v1.0.0.20140629)
— Rds

Risposte:


100

Penso che la soluzione più pulita per questo per ora sia cambiare il comando iniziale nella tua sessione iTerm in

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

Questo risolve il problema per me.

Un ulteriore punto dati per l'analisi del problema: sembra che nella 10.10 esistano più copie della variabile d'ambiente PATH e le subshell sembrano preferire la seconda copia.

Puoi riprodurlo avviando qualsiasi applicazione di cacao sulla console come avviata da iTerm. Riceverai un avviso simile a questo:

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

Credo che questo sia un problema in 10.10 e non in iTerm, ma qualcosa che iTerm sta facendo lo sta facendo manifestare (questo non accade in Terminal.app)

Aggiornamento : questo è causato da iTerm che fa cose "interessanti" per l'ambiente. Aggiorna alla versione ufficiale di iTerm 2.0 per eliminare questo problema.


6
Questa dovrebbe essere la risposta corretta, una soluzione straordinaria. Tuttavia, ho impostato il comando su /usr/bin/login -f $USER, solo così posso avere lo stesso profilo su più account :)
— cadlac

12
Apparentemente, bash rimuove tutte le variabili di ambiente duplicate. Quindi, se imposti il ​​comando su di /bin/bash -c /bin/zshesso, le altre variabili d'ambiente, ad es $SSH_AUTH_SOCK.
— cypheon

2
Questo ha risolto il problema per me nel modo più pulito finora. Molte grazie!
— meghaphone

2
Questo risolve git. Ma ogni volta che ho bisogno di usare ssh con il mio id_rsa.pub, mi è stato chiesto di inserire la passphrase. Non dovevo farlo prima di modificare il comando iniziale, né in Terminal.app. Qualche idea?
— ZeR0

5
Penso /bin/bash -c /bin/zshsia meglio di /usr/bin/login -f <your user name>, perché mantiene la codifica dei caratteri. /usr/bin/login -f <your user name>ho perso la mia codifica e non riesco a visualizzare i miei file normalmente.
— Alpha Liu

35

Credo che questo sia un bug in iTerm quando si usa zsh. Non invocano deliberatamente / usr / bin / login e non usano execle per cancellare le variabili d'ambiente come dovrebbero essere.


1
Wow, penso che tu abbia ragione. Ho passato ore a cercare di far funzionare varie correzioni di Git e si è scoperto che il passaggio da iTerm2 w / zsh al terminale predefinito di Yosemite (ancora con zsh) funziona alla grande. Come l'hai trovato?
— jbnunn

8
Bene, questo è il gruppo di persone più specifico di sempre ... Che caso limite.
— Drew

2
quella è stata un'ottima analisi. Quindi una buona soluzione è impostare il comando iniziale in iTerm su / usr / bin / login -f <nome utente>.
— pilif

13
Un'altra soluzione alternativa è impostare il comando della shell di login in iTerm su/bin/bash -c /bin/zsh
— Vince

1
Cambiando da login shella commandnella sezione Preferenze> Profilo> Generale e usando /bin/bash -c /bin/zahcome suggerito da @Sorenly, risolto il problema!
— jlma fa il

20

Il download della versione più recente di iTerm2 ha risolto il problema per me!


1
Se vuoi risolverlo senza dimostrare che sei un tecnico ..., fallo e basta. Grazie a Marthyn ...
— Krishnaprasad Varma

Come hanno detto i commenti seguenti, sembra che iTerm e zsh insieme impediscano il funzionamento dei pull di git. Andare su iTerm2 lo risolve.
— MikeHoss

4
Per chiarire @MikeHoss, iTerm2 versione 1.0.x non funziona, ma iTerm2 versione 2.0.x sì. Entrambi sono iTerm2, ma la versione è ciò che conta.
— Kevin Cooper

16

Un'altra soluzione, modifica il tuo iTerm2

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

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

chmod +x iTerm

Fatto.

Goditi il ​​tuo iTerm2 con Yosemite!


iTerm2 è il problema e questa è tra le migliori soluzioni al problema. Kudos.
— ocodo

Ho riscontrato questo problema anche nella versione pubblica 10.10 e questo lo ha risolto. Grazie Feng!
— Ash Solrow

13

Come soluzione temporanea ho modificato le linee git-pull 11, 12 e 336 in modo che siano:

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

Questo risolve git-pull per ora, ma sono sicuro che ci sia una soluzione migliore.


2
Ho anche dovuto cambiare tipo 231 a. /usr/local/Cellar/git/2.0.0/libexec/git-core/git-parse-remote
— Keith Smiley

2
Nel caso avessi bisogno di cambiarlo, ho impostato il mio in modo che punti a $GIT_PATH/git-sh-setup, ecc.
— TheJF

1
Ricevo /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?Dopo aver applicato questa correzione, qualcuno ha un'idea di cosa fare?
— Drew

@Andrew Questo è brutto ma ho dovuto passare attraverso git-sh-setup e sostituire tutto gitcon /usr/local/bin/git. C'erano anche alcuni casi di gitgit-pull che dovevano essere sostituiti
— jbnunn

3

Ecco una correzione temporanea (supponendo Homebrew e Git 2.0.0) se hai bisogno che Git funzioni prima che esca una correzione ufficiale. Ho impostato due variabili di 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"

... e quindi ha sostituito le istanze di gitcon collegamenti assoluti appropriati. Puoi utilizzare i seguenti Gist per fare lo stesso:

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

Questo è sicuramente un trucco, ma ti farà andare avanti.

EDIT: assicurati di guardare la risposta di @pilif prima di farlo ...


1

La soluzione alternativa di Ubiquill si applica anche a git rebase (e presumibilmente a qualunque altra funzione non funzioni). In tal caso, è necessario sostituire le righe 47 e 48 con il seguente *:

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

* Questo percorso presuppone che tu abbia git installato con homebrew e risiede all'interno di /usr/local/Cellar/git/2.0.0/.


1

Modifica il tuo file git-pull e aggiungi questa riga sopra (subito dopo il blocco dei commenti)

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

Oppure copia e incolla questo nel tuo terminale:

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

Aggiornamento: come presunto da pilif , dall'ultimo aggiornamento di iTerm2 (1.0.0.20140629), git-pullfunziona correttamente senza questo PATHoverride.


Questa sembra essere l'unica soluzione per fare un passo avanti nella mia configurazione. Dopo aver aggiunto la riga PATH, ottengo questo errore quando provo a PULL: git: 'credential-osxkeychain' non è un comando git. Vedere "git --help". Qualche idea?
— kiks73


0

AGGIORNAMENTO: ancora non funziona con la versione menzionata di seguito, errore mio. Git push funziona Git pull no.

Mi sembra che il problema sia stato risolto da Apple con Mac OS X Yosemite 10.10 ( 14A329r ). sono sul canale generale Beta Yosemite (non sviluppatore). Git push /Tirare funziona di nuovo come previsto senza alcuna modifica.


No, sto riscontrando variabili di ambiente duplicate su 14A329r, quindi non è stato risolto in quella build.
— Zr40

@ Zr40 thx. hai ragione. in qualche modo Git push funziona adesso? per me, ma Git pull NON funziona ancora.
— Frank Lämmer
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.