2011-02-07 15 views

Odpowiedz

38

Konfiguruję test, aby się nie udało. To jest to, co mam:

$ git merge newbranch 
Auto-merging test.txt 
CONFLICT (content): Merge conflict in test.txt 
Automatic merge failed; fix conflicts and then commit the result. 

$ echo $? 
1 

Git zwraca 0 gdy łączy się poprawnie, zgodnie z oczekiwaniami.

+1

Problem polega na tym, że tylko dokumenty dla 'git merge' (w wersji 1.7.4 - http://www.kernel.org/pub/software/scm/git/docs/v1.7.4/git-merge.html) wzmianka o statusie powrotu w jednym miejscu (jeśli używasz opcji "--ff-only" i nie może wykonać zatwierdzenia szybkiego przewinięcia, zwraca wartość niezerową - nie określa jednoznacznie, co jest zwracane, jeśli wszystko działa lub jeśli wystąpił konflikt scalania: –

+5

@Matt: Polecenia Git są bardzo, bardzo dobre, jeśli chodzi o zwracanie zera dla powodzenia i niezerowe (ogólnie 1) w przeciwnym wypadku Zawsze można połączyć łańcuchy poleceń razem bezpiecznie za pomocą '&&';, w ten sposób implementowane są ich testy. – Cascabel

+12

Git nie nadaje się do zwracania spójnych i sensownych kodów wyjścia, na przykład wykonanie polecenia git bez żadnych zmian spowoduje wyjście z kodem 1, ale heck, to jest * nie * błąd – pfalcon

41

W skrócie, nie. Zobaczysz kod wyjścia 1 dla błędów i 0 dla sukcesu.

Z szybkiego podręcznego źródła, niektóre są oczekiwane 127 i 128 dla ich konkretnych celów (polecenie nie znaleziono, błędy już zgłoszono), a kilka nietypowych kodów w kilku miejscach, ale dla przebiegu błędy młyna, wszystko to exit(1).

+2

Tak, widziałem także 127 i 128. W każdym razie, dziękuję. – poymode

+1

Jest to wyjątkowo denerwujące przy debugowaniu haków zatwierdzania. Jaki jest sens posiadania kodu wyjścia w haku git, jeśli nieudane zatwierdzenie będzie zawsze zwracało 1 zamiast kodu wyjścia haka. –

3

Błąd 128, bez komunikatu o błędzie z git, może być złapaniem dla "nieoczekiwanego problemu".

Otrzymałem to na operacje, które wymagały modyfikacji plików w .git (np. "git checkout -- myfile", aby przywrócić zmodyfikowany plik) przez innego użytkownika. (W moim przypadku "chmod -R og+w .git" naprawiono to, oczywiście, nie rób tego, chyba że rozumiesz konsekwencje bezpieczeństwa dla twojego przypadku!)

9

Uruchamianie git status w repozytorium innym niż git zwraca 128, a nie 1, co jest pomocne w szybkie ustalenie, czy repozytorium git istnieje, czy nie.

Powiązane problemy