Come la fusione di errori o il rebase degli errori. Ha un codice di errore univoco?
Risposte:
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 ritorna 0
quando si unisce correttamente, come previsto.
&&
; è così che vengono implementati i loro test.
git rebase
lo stesso comportamento?
In breve, no. Vedrai il codice di uscita 1 per gli errori e 0 per il successo.
Da un rapido grepping del sorgente, ci sono alcuni dei 127 e 128 previsti per i loro scopi specifici (comando non trovato, errori già segnalati) e alcuni codici insoliti in alcuni punti, ma per errori run of the mill, è tutto exit(1)
.
man
pagine per i dettagli.
L'esecuzione git status
su un repository non git restituisce 128, non 1, il che è utile per determinare rapidamente se un repository git esiste o meno.
git push --delete origin a_remote_tag_name
Restituisce 256 se il tag non esiste utilizzando la versione git 1.8.3.1
Sarebbe bello avere un elenco consolidato di codici di ritorno specifici restituiti da ciascun comando e cosa indicano. Ciò potrebbe anche aiutare a prevenire la modifica dei significati del codice di ritorno (su cui potrebbero fare affidamento gli script di automazione).
L'errore 128, senza alcun messaggio di errore da git, potrebbe essere un "problema imprevisto".
Stavo ottenendo questo su operazioni che dovevano modificare i 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 il problema; naturalmente, non farlo a meno che tu non comprenda le implicazioni di sicurezza per il tuo caso!)
Git 2.24 (Q4 2019) illustra come i git
comandi restituiscono il codice.
Vedere commit 50094ca , commit c1a6f21 , commit 854b5cb , commit dd2b6b6 , commit 6bd26f5 , commit c6ec6da , commit f2e2fa8 , commit 460609c , commit 92014b6 , commit 0ab74e9 , commit cb46c40 , commit b562a54 (27 agosto 2019) e commit 20 agosto 2019 di Denton Liu ( Denton-L
) .
(Fuso da Junio C Hamano - gitster
- nel commit 1c6fc94 , 30 settembre 2019)
t4014: smetti di perdere i codici di ritorno dei comandi git
Attualmente, ci sono due modi in cui i codici di ritorno dei comandi Git vengono persi.
Il primo modo è quando un comando è a monte di un tubo. In una pipe, viene utilizzato solo il codice di ritorno dell'ultimo comando. Pertanto, tutti gli altri comandi avranno i loro codici di ritorno mascherati.
Riscrivi le pipe in modo che non ci siano comandi Git a monte.L'altro modo è quando un comando è in una subshell non assegnata .
Il codice di ritorno verrà perso a favore del comando circostante.
Riscrivi le istanze di questo in modo che i comandi Git vengano emessi in un file e i comandi circostanti chiamino solo subshell con comandi non Git.
Quindi, invece di scrivere:
git cat-file commit rebuild-1 | grep "^Side .* with .* backslash-n"
Genere:
git cat-file commit rebuild-1 >actual &&
grep "^Side .* with .* backslash-n" actual
git merge
(in 1.7.4 - kernel.org/pub/software/scm/git/docs/v1.7.4/git-merge.html ) menzionano solo lo stato di ritorno in un posto (se usi "- -ff-only "e non può eseguire un commit di avanzamento rapido, restituisce un valore diverso da zero - non dice esplicitamente cosa viene restituito se tutto funziona o se c'è stato un conflitto di unione.