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

results matching ""

    No results matching ""