Bisekcja
Bisekcja jest mechanizmem gita pozwalającym nam na szybsze debuggowanie naszego repozytorium. Załóżmy sytuację, w której w naszym projekcie pojawił się błąd (lub zmiana) i nie jesteśmy w prosty sposób zdiagnozować kiedy została ona wprowadzona. Przegląd logów nie jest metodą wydajną, gdyż od ostatniej znanej rewizji posiadający dobry, działający kod pojawiło się wiele kontrybucji. Polecenie bisect pozwoli nam w szybszy sposób dojść do commitu, który wprowadził zmianę dzięki bisekcji historii.
Repozytorium
Na potrzeby tego modułu sklonuj repozytorium infoShare Academy Git Bisect Example.
Użycie programu
W repozytorium znajduje się prostu program napisany w NodeJS, którego celem jest wykonywanie obliczeń matematycznych - dodawania i dzielenia. Przykładowe użycie wygląda następująco:
node index.js add 1 2
Powyższe polecenie wypisze na konsoli:
Result: 3
Dzielenie dwóch liczb jest możliwe za pomocą argumentu div:
node index.js div 3 2
Powyższe wyświetli na ekranie:
Result: 1.5
Gdy wykonamy dzielenie przez 0 otrzymamy komunikat:
Result: Infinity
A powinniśmy otrzymać:
Error occurred during calculating the result. Second number cannot be 0!
Bisekcja
Aby rozpocząć proces bisekcji należy w konsoli wydać polecenie:
git bisect start
Musimy teraz wskazać narzędziu co uważamy za dobry commit (taki, który wiemy, że nie posiada błędu):
git bisect good 951d61a15055be13d607b1c972f5c8c5fb79ad9c
Musimy także wskazać najstarszy commit, w którym wiemy, że jest błąd:
git bisect bad b1c769776991f5c4c809317cc30adb5abe994ca0
Git dokonał teraz bisekcji naszej historii i przełączył nas na jeden z commitów. Testujemy aplikacje i informujemy git'a, czy ten commit przeszedł test czy nie - w naszym przypadku przeszedł:
git bisect good
Ponawiamy test i weryfikujemy, że bieżący commit nie przechodzi testu:
git bisect bad
Ponieważ w testowym repozytorium jest mało commitów - dwa testy pozwoliły gitowi okreśić, który commit wprowadził błąd - commit o SHA1 e5f65d197e6d561ae3514cb251d526231d353184. Sprawdzamy zawartość tego commitu:
git show e5f65d197e6d561ae3514cb251d526231d353184