Git bisect: Kako prepoznati grešku u vašem kodu?



Ovaj članak o git bisectu saznajte kako naredba ‘git bisect’ pomaže u otkrivanju prvog lošeg urezivanja koje uvodi grešku pomoću binarnog algoritma pretraživanja.

Moj kôd je do jučer radio u redu, ali sve dok nedavno povlačenje iz udaljenog spremišta nije razbilo kôd !!!

Ako ste u sličnoj situaciji i ne znate kakva promjena razbio šifru ili Who od mnogih suradnika posjeduje ovaj bug / značajka , tada je git bisect vaš izlaz. Dakle, u ovom ćete članku o git bisectu naučiti kakogit bisect‘Zapovijed dolazi do spašavanje u otkrivanju prvog lošeg urezivanja koje uvodi grešku pomoću binarnog algoritma pretraživanja.

Teme koje su obrađene u ovom članku su sljedeće:





Zašto koristiti git bisect?

Nema sumnje u činjenicu da ste skloni stvarati brojne obveze za svaku manju promjenu u . U takvom scenariju otklanjanje pogrešaka u kodu postaje dosadan zadatak, jer se morate ručno vratiti u prošlost na svaku pojedinu reviziju snimke projekta kako biste testirali radni kod i otkrili grešku. Sad ovo postaje još više kompleks kada imate tuđi posao za inspekciju bez vodeće točke, također zahtijevati od svakoga da popravi svoje pogreške ne zvuči previše izvedivo.
Usput biste u procesu mogli stvoriti i odbaciti brojne grane 'značajki' (ili hitnih ispravki) i na kraju izgubiti vrijeme i trud dok odstupate od glavne razvojne linije.



Dakle, da biste izbjegli takve scenarije, možete koristitigit bisectnaredba za pronalaženje loše revizije projekta (ili snimke) i na kraju je popraviti pomoćugit revertnaredba.

Kako pretražuje ‘git bisect’?



Ova naredba dvosjecnice (dijeli) vašu povijest između dobro i loše počiniti domet. Ukazuje na vaše Trenutno projekt država do a srednje klase počiniti snimak. Zatim se kreće naredba git bisect svaki id predavanja između ovog raspona dok zastajući na svakoj snimci da vam to omogući testirati kod . Ako greška postoji, proglašavate predavanje kao loše, ako ne kao dobro osim ako potraga ne završi.

Sintaksa

git bisect

Da bismo bolje razumjeli git bisect, stvorimo projekt koji razvija kôd za jednostavnu navigacijsku aplikaciju koja će se koristiti u automobilu.

Početno postavljanje projekta

Da biste stvorili projekt koji razvija kôd za jednostavnu navigacijsku aplikaciju koja će se koristiti u automobilu, slijedite korake u nastavku:

Korak 1: Stvorite novi direktorij u mapi $ HOME:

cd $ HOME mkdir my_nav_app

Korak 2: Dođite do novog direktorija:

cd $ my_nav_app

Korak 3: Klonirajte da preuzmete projekt s moje GitHub stranice:

git klon https://github.com/divyabhushan/my_nav_app.git

Sada, shvatimo direktorije projekata i raspored datoteka, kako ih ispisuje naredba:ls -lTR

Izgled izvornog koda - Git Bisect - Edureka

Dalje, pogledajmo časopis povijesti projekta kako bismo pregledali obveze koje sam napravio kako bih generirao ovaj kod-

Na primjer, jednostavna naredba git log detaljno ispisuje povijest, međutim, volim prilično oblikovati i prilagoditi povijest. Stoga, pusti nas postaviti alias ime - 'hist' koristiti git alias naredba kao što je prikazano dolje:

git alias.hist 'log --pretty = format:'% C (žuti)% h% Creset% ad | % C (zeleno)% s% Creset% C (crveno)% d% Creset% C (plavo) [% an] '--graph --decorate --date = short'

Sada ću izvršiti ovu značajku ispravljanja programskih pogrešaka u zasebnoj grani, kako ne bih ometao glavni razvoj na 'master' grani. Da biste to učinili, slijedite donji skup naredbi:

  • Stvorite granu 'dev': [master] $git podružnica razv
  • Prebacite se na podružnicu 'dev': $git checkout razv
  • Popis dnevnika povijesti: [dev] $ići hist[Napomena: ovdje se koristi naredba ‘alias]

Nadalje, istaknuo sam posljednji poznati dobar predaj koji znam u kojem je moja skripta dobro funkcionirala s očekivanim rezultatima test slučaja, ovaj snimak urezivanja je označena kao v1.0.

Dakle, sada kada znamo svoj posljednji dobar prijelaz, idemo naprijed u ovom članku o 'git bisect' i testirajte aplikaciju.

koristiti python u vizualnom studiju

Testirajte aplikaciju

Pokrenite skriptu kao - $./scripts/myApplication.sh[testiranje prvi put]



Jasno je da je moje trenutno stanje u projektu pogreška , i nisam siguran koju sam promjenu napravio u kojem preuzimanju koji je uveo ovu promjenu. Dakle, sljedeći u ovom članku o git bisectu, pogledajmo kako identificirati lošu prijavu.

Identifikacija lošeg predavanja

Da biste započeli inspekciju zbog lošeg urezivanja, slijedite korake u nastavku:

  • Pokrenite naredbu bisect :git bisect start
  • Spomenite loš ID izvršenja: git bisect bad HEADiligit bisect c5b3ca8
  • Spomenite zadnji poznati-dobar-počiniti id: git bisect dobro v1.0iligit bisect 93859d8

Ovo dijeli povijest povijesti urezivanja na približno polovinu između dobrih i loših obveza što nas dovodi do id-a urezivanja: f61a7e8

Dakle, naredba je provjerila verziju projekta kakva je bila u ovom id-u predaje. Sada, krenimo i ponovo testirajte našu aplikaciju.

Naredba za pokretanje aplikacije : $./scripts/myApplication.sh[testiranje drugi put]


Od prijave prošao u ovom predaju, ovo predavanje sigurno nije loše izvršavanje. Dakle, dalje morate narediti bisect isto kao - $git bisect dobro


Sada će ovo dodatno suziti rezultat pretraživanja u prvu polovicu raspona kao što je prikazano -


Ponovno testirajte svoju aplikaciju - naredba: $./scripts/myApplication.sh[testiranje treći put]


Dakle, budući da vidimo pogrešku kao gore, ovo je loš prijenos.

Obavijestite naredbu bisect, pokrenite $git bisect bad

povezani popis u c programu


To dodatno sužava pretragu i dovodi vas do posljednje plave okružene srednje revizije: a6ac769

Dakle, posljednji put testiram svoju aplikaciju koristeći istu naredbu: $./scripts/myApplication.sh[četvrti put testiranje]

Budući da je aplikacija ponovno zakazala, to je još uvijek loša prijava. Dakle, pustimo sljedeću naredbu:

Pokrenite naredbu: git bisect bad

Pronađen je loš zapis

Ovim je zaključen jedini posljednji ureza koji je ostao loš -


Dakle, znate da je ovdje kod pukao. Što dalje?

Shvatite u kojoj je datoteci postojala pogreška

U ovom slučaju, izlaz daje minimalne informacije o počiniti id , ime autora , i autorski datum zajedno sa predati poruku i staza koja je modificirana.

Ako želite dalje ispraviti pogreške, morate čitati predati id objekt .

Naredba: git show a6ac76994b3f6c7519204f910fc787b7928cf8ef

Ovo će pročitati objekt urezivanja i ispisati poruku dnevnika i tekstualnu razliku.

Mogli biste upotrijebiti i naredbu 'git krivnja' da biste analizirali kako je i u kojem je urezivanju svaki redak promijenio svaki redak, pokrenite naredbu kao:git krivnja / razvijaj_nav.sh

Zaustavite potragu

Za zaustavljanje pretraživanja upotrijebite sljedeću naredbu:

Naredba: git bisect reset


Dakle, postupak dijeljenja zaustavlja se i vraćate se na granu s koje ste započeli pretragu. Sada je sljedeći korak popraviti ili ispraviti kôd.

Kako ispraviti / ispraviti kôd?

Pa, postoji nekoliko zaobilaznih rješenja koja biste mogli učiniti kako biste popravili trenutno stanje u projektu sada kada ste identificirali predavanje koje je uopće donijelo pogrešku.
Međutim, ako mijenjate predavanje na a zajedničko spremište najbolje je da vratiti se promjena pomoću ' git revert ‘Zapovijedanje.

Zadatak: Vratite promjene učinjene spomenutim lošim urezivanjem

Naredba: git revert a6ac769

Kao rezultat toga, poništavanje promjena koje je izvršio ovaj predaj učinio je 2 stvari:

  • Izbrisao je zadnja 3 dodana retka (označena zelenom bojom) i vratio izbrisani redak (označen crvenom bojom). (naličje a6ac769)
  • Stvorio je dodatno urezivanje s informacijama o vraćanju poruke

'Naredba vraćanja također olakšava praćenje promjene koju ste poništili s izvornog urezivanja'

Koristiti 'pokazati' narediti ponovno za čitanje id objekta, poput so-

Naredba: git emisija 801f029

Sada krenite naprijed i testirajte aplikaciju. Izvršit će se pravilno.

Naredba: $./scripts/myApplication.sh

Suprotno tome, ako želite ukloniti loše urezivanje iz povijesti:

  • Možete koristiti ' git resetiranje 'Naredba s'--teškoOpcija (iako se ne preporučuje u zajedničkom spremištu).

  • Pogledajte raniju verziju jedne datoteke koristeći 'git naplata'Naredba s'-‘Opcija.

Treba imati na umu da će ovo unijeti promjene samo u vaše lokalno spremište dok promjene ne gurnete u udaljeno spremište. Budući da neke promjene stvaraju novi ID objekta urezivanja, kao u našem slučaju gore, u takvim se slučajevima odbija normalno puštanje u udaljeno spremište jer bi se povijest razilažila. Morate koristiti git push 'Naredba s'--sila‘Opcija.

Ažuriranje grane 'master'

Iako sam ispravio bug na svojoj grani 'dev', sada mogu spojiti ovu promjenu s granom 'master' također-

  • prebaciti na 'master', naredba:git checkout master
  • povucite nedavna ažuriranja iz 'origin / master' u 'master', naredba:git pull podrijetlo
  • spajanje promjena 'dev', naredba:git merge div

Međutim, vaše spajanje može generirati sukobe ako postoji više predavanja iz udaljenog spremišta. Riješite sukobe i nastavite s spajanjem.
Konačno, u udaljeno spremište pritisnite samo stabilne nadređene grane „master“, dok prljavi posao (programska pogreška, značajke, poboljšanja) obavljate samo na granama značajki kao što je „dev“ u ovom primjeru.
Štoviše, najbolje je usvojiti logično strategija grananja kako biste pojednostavili i osigurali svoj git proces rada.

Da rezimiramo, 'git bisect' je zgodna i korisna naredba koja brzo identificirati počiniti id da uveo do kvar u vašem pokrenutom kodu uz pomoć opsežnog binarno pretraživanje logično dijeljenje zapisnici urezivanja na pola puta između dobro i loše počiniti domet . Da zaključim, naučili ste otkriti pogrešno počiniti i vratiti se promjena koja je njime izvršena.

Uz to, podnaredbama 'dobro' i 'loše' također možete koristiti izraze poput novog i starog za opis stanja revizije. Naredbu možete izvoditi više puta prolazeći različite podzapovjednike i revidirati / uređivati ​​ID-ove kako biste identificirali različite ID-ove urezivanja (she-1). Alternativno, automatska testna skripta također se može pokrenuti za izgradnju slomljenog koda pomoću ove naredbe. Pokretanjem pronađite i detaljan opis ove naredbegit bisect - pomoćna terminalu. Dakle, ljudi s ovim došli smo do kraja ovog članka o Git Bisectu.

dopuštaju vam metode klase skenera

Namjera DevOps-a je stvoriti kvalitetniji softver brže i s više pouzdanosti, pozivajući pritom na veću komunikaciju i suradnju između timova. Ako vas ovaj članak zaintrigira, c pakao Edureka, pouzdane tvrtke za internetsko učenje s mrežom od više od 250 000 zadovoljnih učenika raširenih širom svijeta. Edureka DevOps certifikacijski tečaj pomaže učenicima da shvate što je DevOps i steknu stručnost u raznim DevOps procesima i alatima kao što su Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack i GIT za automatizaciju više koraka u SDLC-u.

Imate pitanje za nas? Molimo vas da ga spominjete u odjeljku za komentare članka 'Git Bisect' i mi ćemo vam se javiti što prije.