Jeśli jesteś w podobnej sytuacji i nie wiesz jaka zmiana złamał kod lub WHO spośród wielu współtwórców posiada to błąd / funkcja , wtedy git bisect jest twoim wyjściem. Z tego artykułu o git bisect dowiesz się, jak „git bisect
„Przychodzi rozkaz ratunek w wykrywaniu pierwszego złego zatwierdzenia, które wprowadza błąd, za pomocą algorytmu wyszukiwania binarnego.
Tematy poruszone w tym artykule są następujące:
Dlaczego warto używać git bisect?
Nie ma wątpliwości, że masz tendencję do tworzenia wielu zatwierdzeń dla każdej drobnej zmiany w . W takim scenariuszu debugowanie kodu staje się żmudnym zadaniem, ponieważ musisz ręcznie cofnąć się w czasie do każdej wersji migawki projektu, aby przetestować działający kod i wykryć błąd. Teraz jest jeszcze więcej złożony kiedy masz pracę innych do sprawdzenia bez punktu wiodącego, również poproszenie każdego o poprawienie własnych błędów również nie wydaje się zbyt wykonalne.
Po drodze możesz także utworzyć i odrzucić kilka gałęzi „funkcji” (lub poprawek) w tym procesie i stracić czas i wysiłek, odchodząc od głównej linii rozwoju.
Aby więc uniknąć takich scenariuszy, możesz użyćgit bisect
polecenie, aby znaleźć złą wersję projektu (lub migawkę) i ostatecznie naprawić ją za pomocągit revert
Komenda.
Jak wyszukuje się „git bisect”?
To polecenie połówki (dzieli) twoją historię między dobry i zły popełnić zasięg. Wskazuje obecny projekt stan do średni zakres popełnić migawka. Następnie przechodzi polecenie git bisect każdy identyfikator zatwierdzenia między tym zakresem podczas pauza przy każdej migawce, aby ci to umożliwić przetestuj kod . Jeśli błąd istnieje, deklarujesz zatwierdzenie jako zły, jeśli nie jako dobry chyba że wyszukiwanie się zakończy.
Składnia
git bisect
Aby lepiej zrozumieć git bisect, stwórzmy projekt, który opracuje kod prostej aplikacji nawigacyjnej do użytku w samochodzie.
Wstępna konfiguracja projektu
Aby stworzyć projekt, który tworzy kod dla prostej aplikacji nawigacyjnej do użytku w samochodzie, możesz wykonać poniższe kroki:
Krok 1: Utwórz nowy katalog w folderze $ HOME:
cd $ HOME mkdir my_nav_app
Krok 2: Przejdź do nowego katalogu:
cd $ my_nav_app
Krok 3: Sklonuj, aby pobrać projekt z mojej strony GitHub:
klon git https://github.com/divyabhushan/my_nav_app.git
Teraz przyjrzyjmy się katalogom projektu i układowi plików, wydrukowanym poleceniem:ls -lTR
Następnie przyjrzyjmy się dziennikowi historii projektu, aby wyświetlić zatwierdzenia, które wykonałem w celu wygenerowania tego kodu:
Na przykład proste polecenie git log wyświetla szczegółową historię, jednak lubię ładnie formatować i dostosowywać historię. W ten sposób pozwól nam ustaw nazwę aliasu - „hist” używając alias git polecenie, jak pokazano poniżej:
git alias.hist 'log --pretty = format:'% C (żółty)% h% Creset% ad | % C (zielony)% s% Creset% C (czerwony)% d% Creset% C (niebieski) [% an] '--graph --decorate --date = short'
Teraz zamierzam przeprowadzić tę funkcję naprawy błędów w oddzielnej gałęzi, aby nie kolidować z głównym rozwojem w gałęzi „master”. Aby to zrobić, wykonaj poniższy zestaw poleceń:
- Utwórz gałąź „dev”: [mistrz] $
git branch dev
- Przejdź do gałęzi „dev”: $
git checkout dev
- Wymień dzienniki historii: [dev] $
idź hist
[Uwaga: tutaj zastosowano polecenie „alias”]
Co więcej, podkreśliłem ostatnie znane dobre zatwierdzenie, które znam, w którym mój skrypt działał dobrze z oczekiwanymi wynikami przypadku testowego, ta migawka zatwierdzenia to oznaczone jak w wersji 1.0.
Więc teraz, gdy znamy nasze ostatnie dobre zatwierdzenie, przejdźmy dalej w tym artykule na temat „git bisect” i przetestujmy aplikację.
mysql_fetch_array
Przetestuj aplikację
Uruchom skrypt jako - $./scripts/myApplication.sh
[testowanie po raz pierwszy]
Najwyraźniej mój obecny stan projektu jest w toku błąd , i nie jestem pewien, jaką zmianę wprowadziłem w jakim zatwierdzeniu, które wprowadziło tę zmianę. W następnej części tego artykułu o git bisect zobaczmy, jak zidentyfikować złe zatwierdzenie.
Identyfikacja złego popełnienia
Aby rozpocząć sprawdzanie złego zatwierdzenia, wykonaj następujące czynności:
- Uruchom polecenie połowy :
git bisect start
- Wspomnij o identyfikatorze złego popełnienia:
git bisect bad HEAD
lubgit bisect c5b3ca8
- Wspomnij ostatni znany-dobry-identyfikator:
git bisect good v1.0
lubgit bisect 93859d8
To przepoławia zakres historii zatwierdzeń mniej więcej w połowie między dobrymi i złymi zatwierdzeniami, które prowadzą nas do identyfikatora zatwierdzenia: f61a7e8
W związku z tym polecenie pobrało wersję projektu taką, jaka była w tym identyfikatorze zatwierdzenia. Teraz przejdźmy dalej i ponownie przetestujmy naszą aplikację.
Polecenie do uruchomienia aplikacji : $./scripts/myApplication.sh
[test drugi raz]
Ponieważ aplikacja przeszedł w tym zatwierdzeniu to zatwierdzenie z pewnością nie jest złym zatwierdzeniem. Więc następnie musisz poinformować to samo komendę o połówce jako - $git pół dobrze
Teraz spowoduje to dalsze zawężenie wyniku wyszukiwania do pierwszej połowy zakresu, jak pokazano -
Przetestuj swoją aplikację ponownie - polecenie: $./scripts/myApplication.sh
[testowanie po raz trzeci]
Tak więc, ponieważ widzimy błąd jak powyżej, jest to złe zatwierdzenie.
Poinformuj komendę bisect, uruchom $git bisect źle
To jeszcze bardziej zawęża wyszukiwanie i prowadzi do ostatniej wersji środkowej otoczonej niebieskim okręgiem: a6ac769
Dlatego po raz ostatni testuję moją aplikację za pomocą tego samego polecenia: $./scripts/myApplication.sh
[test po raz czwarty]
Teraz, ponieważ aplikacja ponownie zawiodła, nadal jest to złe zatwierdzenie. Więc uruchommy następujące polecenie:
Uruchom polecenie: git bisect źle
Znaleziono błędne zatwierdzenie
To kończy ostatnie zatwierdzenie, które pozostało, które jest złe-
Więc wiesz, że w tym miejscu złamał się kod. Co następne?
Dowiedz się, w którym pliku wystąpił błąd
W takim przypadku dane wyjściowe zawierają minimalne informacje o pliku identyfikator zatwierdzenia , imię autora i data autora razem z komunikat zatwierdzenia i ścieżka który został zmodyfikowany.
Jeśli chcesz dalej debugować, musisz czytać the commit id obiektu .
Komenda: git show a6ac76994b3f6c7519204f910fc787b7928cf8ef
Spowoduje to odczytanie obiektu commit i wydrukowanie komunikatu dziennika i różnic tekstowych.
Równie dobrze możesz użyć polecenia „git blame”, aby przeanalizować, w jaki sposób i w którym zatwierdzeniu każda linia została zmieniona przez którego autora, uruchom polecenie jako:git blame code / develop_nav.sh
Zatrzymaj wyszukiwanie
Aby zatrzymać wyszukiwanie, użyj następującego polecenia:
Komenda: git bisect reset
W ten sposób proces podziału na dwie części zostaje zatrzymany i jesteś z powrotem na gałęzi, z której rozpocząłeś wyszukiwanie. Teraz następnym krokiem jest naprawienie lub debugowanie kodu.
Jak naprawić / debugować kod?
Cóż, jest kilka obejść, które możesz zrobić, aby naprawić obecny stan projektu teraz, gdy zidentyfikowałeś zatwierdzenie, które spowodowało błąd.
Jeśli jednak zmieniasz zatwierdzenie na udostępnione repozytorium najlepiej Odwracać zmiana za pomocą „ git revert ' Komenda.
Zadanie: Cofnij zmiany wprowadzone przez wspomniane złe zatwierdzenie
Komenda: git revert a6ac769
W rezultacie cofnięcie zmian wprowadzonych przez to zatwierdzenie spowodowało 2 rzeczy:
- Usunął ostatnie 3 dodane linie (zaznaczone na zielono) i dodał z powrotem usuniętą linię (zaznaczoną na czerwono). (odwrotność a6ac769)
- Utworzono dodatkowe zatwierdzenie z informacjami o przywróceniu komunikatu
„Polecenie Cofnij ułatwia również śledzenie zmiany cofniętej z pierwotnego zatwierdzenia”
Użyj 'pokazać' polecenie ponownie, aby odczytać identyfikator obiektu, jak np.
Komenda: git pokaż 801f029
Teraz idź dalej i przetestuj aplikację. Będzie działać poprawnie.
Komenda: $./scripts/myApplication.sh
W przeciwieństwie do tego, jeśli chcesz usunąć złe zatwierdzenie z historii:
Możesz użyć „
reset git
„Polecenie z”--ciężko
”(Choć niezalecane w udostępnionym repozytorium).jak sklonować obiekt w java
Sprawdź wcześniejszą wersję jednego pliku za pomocą „
git checkout
„Polecenie z„-
' opcja.
Należy zauważyć, że spowoduje to zmiany w lokalnym repozytorium tylko do momentu przesłania zmian do zdalnego repozytorium. Ponieważ niektóre zmiany tworzą nowy identyfikator obiektu zatwierdzenia, jak w naszym przypadku powyżej, w takich przypadkach normalne wypychanie do zdalnego repozytorium jest odrzucane, ponieważ historia byłaby rozbieżna. Musisz użyć „ git push
„Polecenie z„--siła
' opcja.
Zaktualizuj gałąź „główną”
Chociaż naprawiłem błąd w mojej gałęzi „dev”, mogę teraz scalić tę zmianę również z gałęzią „master” -
- przełącz na „master”, polecenie:
git checkout master
- ściągnij najnowsze aktualizacje z „origin / master” do „master”, polecenie:
git pull origin
- scal zmiany „dev”, polecenie:
git merge gigant
Jednak Twoje scalanie może generować konflikty, jeśli jest więcej zatwierdzeń ze zdalnego repozytorium. Rozwiąż konflikty i kontynuuj scalanie.
Na koniec, wypychaj tylko stabilną gałąź „master” zatwierdzeń do zdalnego repozytorium, podczas gdy twoja brudna praca (błąd, funkcje, ulepszenia) zostanie wykonana tylko na gałęziach funkcji, takich jak „dev” w tym przykładzie.
Ponadto najlepiej jest przyjąć logikę strategia rozgałęzienia usprawnić i zabezpieczyć proces przepływu pracy git.
Podsumowując, „git bisect” to poręczna i użyteczna komenda, która działa szybko zidentyfikować the identyfikator zatwierdzenia że wprowadzone do wina w działającym kodzie za pomocą obszernego pliku wyszukiwanie binarne logicznie działowy zatwierdzenie rejestruje w połowie drogi między dobry i zły popełnić zasięg . Podsumowując, nauczyłeś się wykryć błędne zatwierdzenie i Odwracać zmiana dokonana przez to.
Oprócz podpoleceń „dobry” i „zły” można również używać terminów takich jak nowy i stary do opisania stanu wersji. Polecenie można uruchomić wielokrotnie, przekazując różne podpolecenia i identyfikatory wersji / zatwierdzenia, aby zidentyfikować różne identyfikatory zatwierdzeń (she-1). Alternatywnie, za pomocą tego polecenia można również uruchomić automatyczny skrypt testowy, aby zbudować uszkodzony kod. Znajdź również szczegółowy opis tego polecenia, uruchamiającgit bisect --help
na terminalu. Tak więc, ludzie z tym, kończymy ten artykuł o Git Bisect.
Intencją DevOps jest szybsze i bardziej niezawodne tworzenie oprogramowania lepszej jakości, jednocześnie zachęcając do lepszej komunikacji i współpracy między zespołami. Jeśli intryguje Cię ten artykuł, c heck out the autorstwa Edureka, zaufanej firmy zajmującej się edukacją online, z siecią ponad 250 000 zadowolonych uczniów rozsianych po całym świecie. Szkolenie Edureka DevOps Certification Training pomaga uczniom zrozumieć, czym jest DevOps i zdobyć wiedzę na temat różnych procesów i narzędzi DevOps, takich jak Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack i GIT do automatyzacji wielu kroków w SDLC.
Masz do nas pytanie? Wspomnij o tym w sekcji komentarzy w artykule „Git Bisect”, a my skontaktujemy się z Tobą jak najszybciej.