Git
Przecinanie / znajdowanie wadliwych zobowiązań
Szukaj…
Składnia
git bisect <subcommand> <options>
git bisect start <bad> [<good>...]
git bisect reset
git bisect good
git bisect bad
Wyszukiwanie binarne (git bisect)
git bisect
pozwala ci znaleźć, który commit wprowadził błąd za pomocą wyszukiwania binarnego.
Rozpocznij od podzielenia sesji na dwie części, podając dwa odwołania do zatwierdzenia: dobre zatwierdzenie przed błędem i złe zatwierdzenie po błędzie. Zasadniczo złym zatwierdzeniem jest 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
rozpoczyna wyszukiwanie binarne: Dzieli wersję na pół i przełącza repozytorium na wersję pośrednią. Sprawdź kod, aby ustalić, czy poprawka jest dobra czy zła:
# 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
będzie nadal uruchamiał wyszukiwanie binarne dla każdego pozostałego podzbioru złych wersji, w zależności od twoich instrukcji. git
zaprezentuje pojedynczą wersję, która, chyba że twoje flagi były niepoprawne, będzie dokładnie reprezentować wersję, w której wprowadzono błąd.
Następnie pamiętaj o uruchomieniu git bisect reset
aby zakończyć sesję bisect i wrócić do HEAD.
$ git bisect reset
Jeśli masz skrypt, który może sprawdzić błąd, możesz zautomatyzować proces za pomocą:
$ git bisect run [script] [arguments]
Gdzie [script]
to ścieżka do twojego skryptu, a [arguments]
to wszelkie argumenty, które powinny zostać przekazane do twojego skryptu.
Uruchomienie tego polecenia automatycznie uruchomi wyszukiwanie binarne, wykonując polecenie git bisect good
lub git bisect bad
na każdym kroku, w zależności od kodu wyjścia skryptu. Wyjście z 0 oznacza good
, a wyjście z 1-124, 126 lub 127 oznacza złe. 125 wskazuje, że skrypt nie może przetestować tej wersji (co spowoduje uruchomienie git bisect skip
).
Półautomatycznie znajdź błędne zatwierdzenie
Wyobraź sobie, że jesteś w gałęzi master
i coś nie działa zgodnie z oczekiwaniami (wprowadzono regresję), ale nie wiesz gdzie. Wiesz tylko, że działało to w ostatniej wersji (która została np. Oznaczona lub znasz skrót zatwierdzenia, weźmy tutaj old-rel
).
Git ma dla Ciebie pomoc w znalezieniu błędnego zatwierdzenia, które wprowadziło regresję z bardzo małą liczbą kroków (wyszukiwanie binarne).
Po pierwsze zacznij dzielić na dwie części:
git bisect start master old-rel
To powie gitowi, że master
jest zepsutą wersją (lub pierwszą zepsutą wersją), a old-rel
jest ostatnią znaną wersją.
Git sprawdzi teraz odłączoną głowę w środku obu zatwierdzeń. Teraz możesz wykonać testy. W zależności od tego, czy działa, czy nie
git bisect good
lub
git bisect bad
. Jeśli to zatwierdzenie nie może być przetestowane, możesz łatwo git reset
i przetestować to, git zajmie się tym.
Po kilku krokach git wyświetli wadliwy skrót zatwierdzenia.
Aby przerwać proces dzielenia, po prostu wydaj
git bisect reset
a git przywróci poprzedni stan.