Introduzione a Git Bisect
"git bisect" può essere un po 'di confusione in un primo momento. Una volta compreso ciò che fa, sarà facile.
Il tipico scenerio per "git bisect" è: un bug è stato appena scoperto. Vuoi scoprire quale rev ha introdotto il bug. Sai che il bug esiste nell'ultimo rev, ma è stato introdotto in un precedente rev. Avrai bisogno di un modo per scoprire se il bug esiste o meno. Questo può essere un test automatico o può essere un test eseguito a mano.
Iniziamo. A partire dal più recente giro nel vostro ramo, problema:
git bisect start
e poi dire git che la versione corrente è noto per essere un male:
git bisect bad
Ora abbiamo bisogno di trovare un buon giro. Controlla una cosa abbastanza vecchia da non avere il bug. Se si pensa che 32 giri fa dovrebbe essere buono, quindi:
git checkout HEAD~32
ed eseguire il test per vedere se ha il bug. Se ha il bug, dovrai provare un rev più vecchio (basta "git checkout HEAD ~ 32" di nuovo). Non appena si terra su un giro che non ha il bug, quindi:
git bisect good
che racconta git che l'attuale versione è buona. Git verificherà immediatamente un giro tra la buona rotazione e la brutta piega; vedrete in uscita, ad esempio:
$ git bisect good
Bisecting: 7 revisions left to test after this (roughly 3 steps)
[909ba8cd7698720d00b2d10738f6d970a8955be4] Added convenience delegators to Cache
Esegui il test, e, a seconda dei risultati del test, eseguire uno di questi comandi:
git bisect good # the test passed
git bisect bad # the test failed
git bisect skip # we can't run the test on this rev for some reason (doesn't compile, etc.)
Git continuerà a cambiare a differe nt revs, e continuerai a dirlo bene, male o saltare. Quando git finalmente capisce che giri ha iniziato tutti i problemi, si otterrà qualcosa di simile:
b25ab3cee963f4738264c9c9b5a8d1a344a94623 is the first bad commit
commit b25ab3cee963f4738264c9c9b5a8d1a344a94623
Author: Wayne Conrad <[email protected]>
Date: Fri Dec 25 18:20:54 2009 -0700
More tests and refactoring
:040000 040000 6ff7502d5828598af55c7517fd9626ba019b16aa 39f346cb5a289cdb0955fcbba552f40e704b7e65 M routecalc
E il vostro giro corrente sarà lì, al primo cattivo commettere.
esecuzione git bisect "giù le mani"
Se il test è automatico, allora si può lasciare che git fare tutto il lavoro.Fai tutto ciò che hai fatto per iniziare sopra:
git bisect start
git bisect bad
git checkout HEAD~32 # or however far back it takes to find a good rev
git bisect good
E ora per la magia. Tutto ciò che serve è un programma di test che restituisca il codice di uscita "0" per il successo e 1 (ad esempio) per il fallimento. Dillo git circa il test: "git bisect cattivo"
git bisect run tests/mytest.rb
Git verrà eseguito il test, utilizzando i risultati per fare automaticamente un "git bisect buono" o un Continuerà a farlo finché non verrà trovato il commit che ha introdotto il bug. Tutto quello che devi fare è sederti e guardare.
Quando hai finito
Quando hai finito, problema:
git bisect reset
Git vi metterà di nuovo al punto di partenza.
Quali argomenti stai passando a "buono" e "cattivo"? Il "cattivo" commette un discendente del commit "buono"? –
Sto avendo lo stesso problema. Nessun output dopo aver eseguito 'git bisect start' e quindi' git bisect bad' o 'git bisect good'. 'git bisect visualize' outputs 'Devi darmi almeno una buona e una cattiva revisione. (Puoi usare "git bisect bad" e "git bisect good" per quello.) "Non importa quante volte faccio' git bisect good' o 'git bisect bad' –