OSX 10.10 yosemite beta na git pull: git-sh-setup: Brak takiego pliku lub katalogu

90

Po uaktualnieniu do wersji OSX 10.10 Yosemite Beta, uruchomienie git pullzwraca następujący błąd:

/ Library / Developer / CommandLineTools / usr / libexec / git-core / git-pull: line 11: git-sh-setup: Nie ma takiego pliku ani katalogu

Sprawdziłem katalog git-core, do którego się odwołano, i znajduje się tam plik git-sh-setup.sh.

Inne polecenia git działają dokładnie tak, jak oczekiwano

megafon
źródło
3
Ja też mam ten problem, z wyjątkiem z git stash. Dam ci znać, jeśli znajdę rozwiązanie
cadlac
Problem z zsh ... git wydawał się działać dobrze po uruchomieniu z basha. Związane z Zsh?
zeekay
12
To był błąd w iTerm2 z zsh. iTerm2 naprawił to w swojej najnowszej wersji (v1.0.0.20140629)
rds

Odpowiedzi:

100

Myślę, że najczystszym rozwiązaniem na razie jest zmiana początkowego polecenia w sesji iTerm na

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

To rozwiązuje problem.

Kolejny punkt danych do analizy problemu: wydaje się, że w 10.10 istnieje wiele kopii zmiennej środowiskowej PATH, a podpowłoki wydają się preferować drugą kopię.

Możesz to odtworzyć, uruchamiając dowolną aplikację kakaową na konsoli uruchomioną przez iTerm. Otrzymasz ostrzeżenie, które wygląda następująco:

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

Uważam, że jest to problem w 10.10, a nie w iTermie, ale coś, co robi iTerm, powoduje, że się manifestuje (nie dzieje się to w Terminal.app)

Aktualizacja : Jest to spowodowane tym, że iTerm robi „ciekawe” rzeczy dla środowiska. Zaktualizuj do oficjalnej wersji iTerm 2.0, aby rozwiązać ten problem.

pilif
źródło
6
To powinna być prawidłowa odpowiedź, niesamowita poprawka. Jednak ustawiłem polecenie na /usr/bin/login -f $USER, tylko po to, aby mieć ten sam profil na wielu kontach :)
cadlac
12
Najwyraźniej bash usuwa wszystkie zduplikowane zmienne środowiskowe. Tak więc, jeśli ustawisz polecenie na /bin/bash -c /bin/zshto, zachowane zostaną inne zmienne środowiskowe, np $SSH_AUTH_SOCK.
cypheon
2
To rozwiązało problem w jak dotąd najczystszy sposób. Wielkie dzięki!
megafon
2
To naprawia git. Ale ilekroć muszę użyć ssh z moim id_rsa.pub, byłam proszona o wprowadzenie hasła. Nie musiałem tego robić przed zmianą początkowego polecenia ani w Terminal.app. Dowolny pomysł?
ZeR0
5
Myślę, że /bin/bash -c /bin/zshjest lepszy niż /usr/bin/login -f <your user name>, ponieważ zachowuje kodowanie znaków. /usr/bin/login -f <your user name>utraciłem kodowanie i nie mogę normalnie wyświetlać moich plików.
Alpha Liu
35

Uważam, że jest to błąd w iTermie podczas korzystania z zsh. Celowo nie wywołują / usr / bin / login i nie używają execle do czyszczenia zmiennych środowiskowych tak, jak powinny.

Jeremy Huddleston Sequoia
źródło
1
Wow, myślę, że masz rację. Spędziłem godziny, próbując uruchomić różne poprawki Gita i okazuje się, że przejście z iTerm2 w / zsh na domyślny terminal Yosemite (nadal z zsh) działa świetnie. Jak to znalazłeś?
jbnunn
8
Cóż, to najbardziej specyficzna grupa ludzi kiedykolwiek ... Co za skrajny przypadek.
Drew
2
to była bardzo dobra analiza. Dlatego dobrym obejściem jest ustawienie początkowego polecenia w iTerm na / usr / bin / login -f <twoja nazwa użytkownika>.
pilif
13
Innym obejściem jest ustawienie polecenia powłoki logowania w iTerm na/bin/bash -c /bin/zsh
Vince,
1
Zmiana z login shellna commandw sekcji Preferencje> Profil> Ogólne i użycie /bin/bash -c /bin/zahzgodnie z sugestią @Sorenly rozwiązało ten problem!
jlmakes
20

Pobranie najnowszej wersji iTerm2 rozwiązało ten problem!

Marthyn Olthof
źródło
1
Jeśli chcesz go rozwiązać bez udowadniania, że ​​jesteś technikiem ... po prostu zrób to. Dzięki Marthyn ...
Krishnaprasad Varma
Jak powiedziano w komentarzach poniżej, wydaje się, że to iTerm i zsh razem uniemożliwiają działanie git pull. Przejście do iTerm2 rozwiązuje ten problem.
MikeHoss
4
Aby wyjaśnić @MikeHoss, iTerm2 w wersji 1.0.x nie działa, ale iTerm2 w wersji 2.0.x tak. Oba to iTerm2, ale liczy się wersja.
Kevin Cooper
16

Inne rozwiązanie, zmodyfikuj swój iTerm2

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

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

chmod +x iTerm

Gotowe.

Ciesz się iTerm2 z Yosemite!

Feng
źródło
iTerm2 jest problemem i jest to jedno z najlepszych rozwiązań problemu. Sława.
ocodo
Miałem ten problem nawet w publicznej wersji 10.10 i to go rozwiązało. Dzięki Feng!
Ash Bruzda
13

Jako rozwiązanie tymczasowe zmodyfikowałem linie git-pull 11, 12 i 336 tak, aby były:

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

To naprawia na razie git-pull, ale jestem pewien, że istnieje lepsze rozwiązanie.

Ubiquill
źródło
2
Musiałem też zmienić 231 na. /usr/local/Cellar/git/2.0.0/libexec/git-core/git-parse-remote
Keith Smiley
2
Na wypadek, gdybym musiał to zmienić, ustawiłem swój, aby wskazywał $GIT_PATH/git-sh-setupitp.
TheJF
1
Otrzymuję /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?Po zastosowaniu tej poprawki, ktoś ma pomysł, co robić?
Drew
@Andrew To jest brzydki, ale musiałem przejść przez git-SH-setup i zastąpić wszystko gitz /usr/local/bin/git. Było kilka przypadków gitgit-pull, które również musiały zostać zastąpione
jbnunn
3

Oto tymczasowa poprawka (zakładając Homebrew i Git 2.0.0), jeśli chcesz, aby Git działał, zanim pojawi się oficjalna poprawka. Ustawiam dwie zmienne powłoki:

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"

... a następnie zastąpiono wystąpienia gitodpowiednich linków bezwzględnych. Możesz użyć następujących Gists, aby zrobić to samo:

  • Wymienić /usr/local/Cellar/git/2.0.0/libexec/git-core/git-sh-setup/ z git-SH-setup
  • Wymienić /usr/local/Cellar/git/2.0.0/libexec/git-core/git-stash/ z git-zapas
  • Wymienić /usr/local/Cellar/git/2.0.0/libexec/git-core/git-pull/ z git-pull

To z pewnością hack, ale sprawi, że zaczniesz działać.

EDYTUJ: Upewnij się, że spojrzysz na odpowiedź z @pilif, zanim to zrobisz ...

jbnunn
źródło
1

Obejście Ubiquill dotyczy również git rebase (i prawdopodobnie niezależnie od tego, które inne funkcje nie działają). W takim przypadku wymaga zastąpienia wierszy 47 i 48 następującym *:

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

* Ta ścieżka zakłada, że ​​masz zainstalowanego gita z homebrew i znajduje się on w /usr/local/Cellar/git/2.0.0/.

ferchak
źródło
1

Edytuj swój plik git-pull i dodaj tę linię nad nim (tuż po bloku komentarza)

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

Lub po prostu skopiuj, wklej to w swoim terminalu:

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

Aktualizacja: zgodnie z założeniami pilif , od ostatniej aktualizacji iTerm2 (1.0.0.20140629), git-pulldziałają poprawnie bez tego PATHzastąpienia.

pyrou
źródło
Wydaje się, że jest to jedyne rozwiązanie, które pozwala zrobić krok do przodu w mojej konfiguracji. Po dodaniu linii PATH pojawia się ten błąd, gdy próbuję PULL: git: „credential-osxkeychain” nie jest poleceniem git. Zobacz „git --help”. Jakieś pomysły?
kiks73
0

UPDATE: nadal nie działa z wydaniem wymienionym poniżej, mój błąd. Git push działa Git pull nie działa.

Wydaje mi się, że problem został rozwiązany przez firmę Apple w systemie Mac OS X Yosemite 10.10 ( 14A329r ). Jestem na ogólnym kanale Beta Yosemite (nie programista). Git push /Ciągnąć działa ponownie zgodnie z oczekiwaniami bez żadnych modyfikacji.

Frank Lämmer
źródło
Nie, występują zduplikowane zmienne środowiskowe w 14A329r, więc nie zostało to naprawione w tej kompilacji.
Zr40,
@ Zr40 thx. masz rację. jakoś Git push działa teraz? dla mnie, ale Git pull nadal NIE działa.
Frank Lämmer