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.