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.



Modified text is an extract of the original Stack Overflow Documentation
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow