Git bisect: Ako zistiť chybu vo vašom kóde?



V tomto článku o git bisect sa dozviete, ako príkaz ‘git bisect‘ pomáha pri detekcii prvého chybného potvrdenia, ktoré zavádza chybu, pomocou algoritmu binárneho vyhľadávania.

Môj kód fungoval dobre až do včerajška, ale až po nedávnom stiahnutí zo vzdialeného úložiska sa kód zlomil !!!

Ak ste v podobnej situácii a neviete aká zmena porušil kód alebo SZO z mnohých prispievateľov vlastné toto chyba / funkcia , potom je cesta git bisect. V tomto článku o git bisect sa teda dozviete, ako ‘git bisect‘Príkaz prichádza k záchrana pri detekcii prvého chybného potvrdenia, ktoré zavádza chybu, pomocou algoritmu binárneho vyhľadávania.

V tomto článku sa venujeme týmto témam:





Prečo používať git bisect?

Niet pochýb o tom, že máte tendenciu vytvárať množstvo záväzkov za každú malú zmenu . V takomto scenári sa ladenie kódu stane zdĺhavou úlohou, pretože na otestovanie pracovného kódu a zistenie chyby sa musíte manuálne vrátiť v čase ku každej jednej revízii snímky projektu. Teraz je to ešte viac zložité keď máte prácu iného na inšpekciu bez vedúceho bodu, tiež neznie veľmi reálne ani požiadať každého o vyčistenie svojich vlastných chýb.
Postupom času môžete tiež vytvoriť a zahodiť množstvo vetiev „funkcií“ (alebo rýchlych opráv) v procese a skončiť tak s plytvaním časom a úsilím a odchýlením sa od hlavnej línie vývoja.



Aby ste sa takýmto scenárom vyhli, môžete použiťgit bisectpríkaz nájsť zlú revíziu projektu (alebo snímku) a nakoniec ho opraviť pomocougit vrátiť sapríkaz.

Ako vyhľadáva „git bisect“?



Tento príkaz bisects (rozdeľuje) vašu históriu medzi dobre a zlé spáchať rozsah. Poukazuje to na vaše prúd projekt štát do a stredný rozsah spáchať momentka. Potom sa presunie príkaz git bisect každé potvrdenie id medzi týmto rozsahom zatiaľ čo pozastavenie pri každej snímke, aby ste to mohli urobiť otestujte kód . Ak chyba existuje, vyhlásite potvrdenie za zlé, ak nie ako dobre pokiaľ hľadanie neskončí.

Syntax

git bisect

Aby sme lepšie porozumeli git bisect, vytvorme projekt, ktorý vyvinie kód pre jednoduchú navigačnú aplikáciu, ktorá sa bude používať v automobile.

Počiatočné nastavenie projektu

Pri vytváraní projektu, ktorý vyvíja kód pre jednoduchú navigačnú aplikáciu pre použitie v automobile, môžete postupovať podľa nasledujúcich krokov:

Krok 1: Vytvorte nový adresár vo vašom priečinku $ HOME:

cd $ HOME mkdir my_nav_app

Krok 2: Prejdite do nového adresára:

cd $ my_nav_app

Krok 3: Klonujte a stiahnite si projekt z mojej stránky GitHub:

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

Teraz pochopme rozloženie adresárov a súborov projektu, ako ich tlačí príkaz:ls -lTR

Rozloženie zdrojového kódu - Git Bisect - Edureka

Ďalej si pozrime denník histórie projektu, kde si môžeme prezrieť záväzky, ktoré som urobil za účelom vygenerovania tohto kódu-

Napríklad jednoduchý príkaz git log vytlačí históriu podrobne, ale rád by som ju pekne naformátoval a prispôsobil. Týmto poďme nastaviť alias názov - ‘hist’ pomocou git alias príkaz, ako je uvedené nižšie:

git alias.hist 'log --pretty = formát:'% C (žltý)% h% Creset% ad | % C (zelená)% s% Creset% C (červená)% d% Creset% C (modrá) [% an] '--graph --decorate --date = short'

Teraz túto funkciu opravy chýb vykonám v samostatnej vetve, aby som nezasahoval do hlavného vývoja v pobočke „master“. Postupujte takto:

  • Vytvoriť vetvu „dev“: [majster] $git pobočka dev
  • Prepnúť na pobočku „dev“: $git checkout dev
  • Zoznam protokolov histórie: [dev] $choď hist[Poznámka: Tu sa používa príkaz „alias“]

ako previesť z double na int java -

Ďalej som zdôraznil posledné známe dobré potvrdenie, o ktorom viem, že v ňom môj skript fungoval dobre s očakávanými výsledkami testovacích prípadov, táto snímka potvrdenia je označený ako v1.0.

Teraz, keď už poznáme naše posledné dobré potvrdenie, poďme teda v tomto článku o „git bisect“ a otestujme aplikáciu.

Vyskúšajte aplikáciu

Spustite skript ako - $./scripts/myApplication.sh[testovanie prvýkrát]



Je zrejmé, že môj súčasný stav projektu je v chyba , a nie som si istý, akú zmenu som vykonal v prípade spáchania, ktoré zaviedlo túto zmenu. Ďalej sa teda v tomto článku o git bisect pozrime, ako zistiť zlé spáchanie.

Identifikácia zlého spáchania

Ak chcete začať kontrolovať zlé spáchanie, postupujte podľa nasledujúcich krokov:

  • Spustite príkaz bisect :štart git bisect
  • Uveďte zlé ID spáchania: git bisect zlá HLAVAalebogit bisect c5b3ca8
  • Uveďte ID posledného známeho dobrého potvrdenia: git bisect good v1.0alebogit bisect 93859d8

Toto rozdeľuje históriu záväzkov zhruba na polcestu medzi dobrými a zlými záväzkami, ktoré nás privádzajú k ID potvrdenia: f61a7e8

Príkaz teda skontroloval verziu projektu, ktorá bola v tomto potvrdení. Poďme teraz a znova otestujme našu aplikáciu.

Príkaz na spustenie aplikácie : $./scripts/myApplication.sh[testovanie druhýkrát]


Od aplikácie prešiel v tomto spáchaní tento záväzok určite nie je zlým spáchaním. Ďalej teda musíte príkazu bisect oznámiť to isté ako - $git bisect dobrý


Týmto sa výsledok vyhľadávania ešte viac zúži na prvú polovicu rozsahu, ako je to znázornené -


Znova otestujte svoju aplikáciu - Príkaz: $./scripts/myApplication.sh[testovanie tretíkrát]


Pretože vidíme chybu, ako je uvedené vyššie, jedná sa o zlé spáchanie.

Dajte príkaz bisect vedieť, spustite $git bisect zlý


Tým sa ďalej zúži vyhľadávanie a dostanete sa k poslednej modrej obklopenej strednej revízii: a6ac769

Takže aplikáciu naposledy otestujem pomocou rovnakého príkazu: $./scripts/myApplication.sh[testovanie štvrtýkrát]

Pretože aplikácia znova zlyhala, stále ide o zlé spáchanie. Poďme teda spustiť nasledujúci príkaz:

Spustite príkaz: git bisect zlý

Nájdené zlé spáchanie

Týmto sa uzatvára jediný posledný záväzok, ktorý zostáva


Takže viete, že tu došlo k porušeniu kódu. Čo ďalej?

Pochopte, v ktorom súbore bola chyba

V takom prípade vám výstup poskytne minimálne informácie o potvrdiť id , meno autora a dátum autorstva spolu s potvrdiť správu a cesta ktorý bol upravený.

Ak chcete ladiť ďalej, musíte čítať the spáchať id objekt .

Príkaz: git show a6ac76994b3f6c7519204f910fc787b7928cf8ef

Toto prečíta objekt potvrdenia a vytlačí správu a textový rozdiel.

Môžete tiež použiť príkaz „git blame“ na analýzu toho, ako a pri ktorom potvrdení bol každý riadok zmenený tým, ktorý autor, spustite príkaz ako:kód viny git / develop_nav.sh

Zastavte hľadanie

Vyhľadávanie zastavíte pomocou nasledujúceho príkazu:

Príkaz: reset git bisect


Proces rozpolenia sa tak zastaví a vy ste späť na vetve, z ktorej ste začali hľadať. Ďalším krokom je oprava alebo ladenie kódu.

Ako opraviť / odladiť kód?

Existuje niekoľko riešení, ktoré môžete urobiť, aby ste napravili súčasný stav projektu, keď ste na prvom mieste identifikovali spáchanie, ktoré chybu prinieslo.
Ak však meníte záväzok k a zdieľané úložisko to je najlepšie prejsť späť zmena pomocou „ git vrátiť sa „Príkaz.

Úloha: Vrátiť zmeny vykonané v uvedenom chybnom potvrdení

Príkaz: git vráti a6ac769

Výsledkom bolo, že vrátenie zmien vykonaných týmto potvrdením urobilo dve veci:

  • Odstránili sa posledné 3 pridané riadky (označené zelenou farbou) a odstránený riadok (označené červenou farbou) boli pridané späť. (zadná strana a6ac769)
  • Vytvoril sa ďalší potvrdenie s informáciami o vrátenej správe

„Príkaz Vrátiť tiež uľahčuje sledovanie zmien, ktoré ste vrátili od pôvodného potvrdenia.“

Použi 'šou' znova príkaz na načítanie ID objektu, napríklad

Príkaz: ukážka git 801f029

periodická tabuľka nástrojov devops

Teraz pokračujte a aplikáciu otestujte. Vykoná sa správne.

Príkaz: $./scripts/myApplication.sh

Naopak, ak chcete z histórie odstrániť zlý príkaz:

  • Môžete použiť git reset „Príkaz s“--hard”(Aj keď sa to v zdieľanom úložisku neodporúča).

  • Prezrite si staršiu verziu jedného súboru pomocou nástroja „pokladňa git„Príkaz s“-„Možnosť.

Je potrebné poznamenať, že týmto sa vykonajú zmeny iba v miestnom úložisku, kým tieto zmeny neodošlete do vzdialeného úložiska. Pretože niektoré zmeny vytvárajú nové ID objektu odovzdania, ako je to v našom prípade vyššie, v takýchto prípadoch je bežné stlačenie do vzdialeného úložiska odmietnuté, pretože by sa história líšila. Musíte použiť ‘ git push „Príkaz s“- sila„Možnosť.

Aktualizujte „hlavnú“ vetvu

Zatiaľ čo som opravil chybu vo svojej vetve „dev“, teraz môžem túto zmenu zlúčiť aj s vetvou „master“ -

  • prepnúť na „master“, príkaz:majster pokladne git
  • stiahnuť posledné aktualizácie z „origin / master“ na „master“, príkaz:git pull origin
  • zlúčiť zmeny „dev“, príkaz:git zlúčiť obra

Vaše zlúčenie však môže spôsobiť konflikty, ak existuje viac záväzkov zo vzdialeného úložiska. Vyriešte konflikty a pokračujte v zlúčení.
Na záver zatlačte iba stabilnú vetvu ‘master’ do vzdialeného úložiska, kým svoju špinavú prácu (chyba, funkcie, vylepšenia) necháte vykonať iba na vetvách funkcií, ako je v tomto príklade napríklad ‘dev’.
Najlepšie je navyše prijať logický prístup stratégia rozvetvenia na zefektívnenie a zabezpečenie procesu pracovného toku git.

Ak to zhrnieme, ‘git bisect’ je šikovný a užitočný príkaz, ktorý rýchlo identifikovať the potvrdiť id že predstavený do chyba vo vašom bežiacom kóde pomocou rozsiahleho binárne vyhľadávanie logicky delenie protokoly potvrdenia na polceste medzi dobre a zlé spáchať rozsah . Na záver ste sa naučili zistiť chybné spáchanie a prejsť späť ňou vykonaná zmena.

Okrem čiastkových príkazov „dobrý“ a „zlý“ môžete na opis stavu revízie použiť aj výrazy ako nový a starý. Príkaz môžete spustiť viackrát a prejsť rôznymi podpríkazmi a ID revízií / potvrdení, aby ste identifikovali rôzne ID potvrdenia (she-1). Alternatívne je možné spustiť automatický testovací skript na vytvorenie nefunkčného kódu pomocou tohto príkazu. Spustením tiež vyhľadajte podrobný popis tohto príkazugit bisect - pomocna termináli. Takže, týmto sa dostávame k ukončeniu tohto článku o Git Bisect.

Zámerom spoločnosti DevOps je rýchlejšie a spoľahlivejšie vytvárať kvalitnejší softvér a zároveň vyžadovať lepšiu komunikáciu a spoluprácu medzi tímami. Ak vás tento článok zaujal, c sakra autor: Edureka, dôveryhodná online vzdelávacia spoločnosť so sieťou viac ako 250 000 spokojných študentov rozmiestnených po celom svete. Edureka DevOps Certification Training kurz pomáha študentom pochopiť, čo je DevOps, a získať odborné znalosti v rôznych procesoch a nástrojoch DevOps, ako sú Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack a GIT na automatizáciu viacerých krokov v SDLC.

Máte na nás otázku? Uveďte to v sekcii komentárov v článku „Git Bisect“ a my sa vám ozveme čo najskôr.