Git
Bisecatura / individuazione di errori commessi
Ricerca…
Sintassi
git bisect <subcommand> <options>
git bisect start <bad> [<good>...]
git bisect reset
git bisect good
git bisect bad
Ricerca binaria (bisit)
git bisect
ti permette di trovare quale commit ha introdotto un bug usando una ricerca binaria.
Inizia bisecando una sessione fornendo due riferimenti di commit: un buon commit prima del bug e un commit errato dopo il bug. Generalmente, il commit HEAD
è HEAD
.
# start the git bisect session
$ git bisect start
# give a commit where the bug doesn't exist
$ git bisect good 49c747d
# give a commit where the bug exist
$ git bisect bad HEAD
git
avvia una ricerca binaria: divide la revisione a metà e passa il repository alla revisione intermedia. Ispeziona il codice per determinare se la revisione è buona o cattiva:
# tell git the revision is good,
# which means it doesn't contain the bug
$ git bisect good
# if the revision contains the bug,
# then tell git it's bad
$ git bisect bad
git
continuerà a eseguire la ricerca binaria su ogni sottoinsieme rimanente di revisioni errate a seconda delle tue istruzioni. git
presenterà una singola revisione che, a meno che i tuoi flag non siano corretti, rappresenterà esattamente la revisione in cui è stato introdotto il bug.
Successivamente, ricorda di eseguire git bisect reset
per terminare la sessione di bisect e tornare a HEAD.
$ git bisect reset
Se disponi di uno script che può controllare il bug, puoi automatizzare il processo con:
$ git bisect run [script] [arguments]
Dove [script]
è il percorso del tuo script e [arguments]
sono argomenti da passare al tuo script.
L'esecuzione di questo comando verrà eseguita automaticamente attraverso la ricerca binaria, eseguendo git bisect good
o git bisect bad
a ogni passaggio a seconda del codice di uscita del tuo script. L'uscita con 0 indica il good
, mentre l'uscita con 1-124, 126 o 127 indica il cattivo. 125 indica che lo script non può testare quella revisione (che attiverà un git bisect skip
).
Trova automaticamente un commit errato
Immagina di essere sul ramo master
e qualcosa non funziona come previsto (è stata introdotta una regressione), ma non sai dove. Tutto quello che sai è che funzionava nell'ultima versione (che era ad esempio, taggato o che conosci l'hash del commit, lascia fare old-rel
qui).
Git ti ha aiutato, trovando il commit errato che ha introdotto la regressione con un numero molto basso di passaggi (ricerca binaria).
Innanzitutto iniziate bisecando:
git bisect start master old-rel
Questo dirà a git che il master
è una revisione non funzionante (o la prima versione spezzata) e old-rel
è l'ultima versione conosciuta.
Git controllerà ora una testa staccata nel mezzo di entrambi i commit. Ora puoi fare i tuoi test. A seconda che funzioni o meno
git bisect good
o
git bisect bad
. Nel caso in cui questo commit non possa essere testato, puoi facilmente git reset
e testarlo, git willl si prenderà cura di questo.
Dopo alcuni passaggi, git emetterà l'errore di commit errato.
Per abortire il processo di bisect, basta emettere
git bisect reset
e git ripristinerà lo stato precedente.