Git Ricerca binaria (bisit)


Esempio

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