2011-02-07 12 views

risposta

38

Ho impostato un test per fallire. Questo è quello che ho ottenuto:

$ 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 torna 0 quando si fonde in modo corretto, come previsto.

+1

Problema, i documenti per 'git merge' (a 1.7.4 - http://www.kernel.org/pub/software/scm/git/docs/v1.7.4/git-merge.html) solo menziona lo stato di ritorno in un posto (se usi "--ff-only" e non può fare un commit veloce, esso ritorna diverso da zero - non dice esplicitamente cosa viene restituito se tutto funziona o –

+5

@Matt: i comandi Git sono molto, molto buoni per restituire zero per il successo e non zero (generalmente 1) altrimenti. È sempre possibile concatenare i comandi in modo sicuro con '&&'; in questo modo vengono implementati i test. – Cascabel

+12

Git non è adatto per restituire codici di uscita coerenti e sensibili. Ad esempio, se si esegue commit git senza modifiche, il codice 1 verrà chiuso, ma è un errore * not * – pfalcon

41

In breve, no. Vedrai il codice di uscita 1 per gli errori e 0 per il successo.

Da un rapido grepping della sorgente, ci sono alcuni dei previsti 127 e 128 per i loro scopi specifici (comando non trovato, errori già segnalati) e alcuni codici insoliti in alcuni punti, ma per la corsa del errori di laminazione, è tutto exit(1).

+2

Sì, ho visto anche 127 e 128. Comunque, grazie. – poymode

+1

Ciò è particolarmente fastidioso per il debug dei ganci di commit. Qual è il punto di avere anche un codice di uscita nei git git se un commit fallito restituirà sempre 1 invece del tuo codice di uscita hook. –

3

Errore 128, senza alcun messaggio di errore da git, potrebbe essere un catch-all per "problema inaspettato".

Stavo ricevendo questo su operazioni che avevano bisogno di modificare file sotto .git (ad esempio "git checkout -- myfile" per ripristinare un file modificato) da un utente diverso. (Nel mio caso "chmod -R og+w .git" risolto, naturalmente, non farlo se non comprendi le implicazioni sulla sicurezza per il tuo caso!)

9

L'esecuzione di git status su un repo non-git restituisce 128, non 1, che è utile in determinare rapidamente se esiste un repository git o meno.

Problemi correlati