Git bisect: Jak identifikovat chybu v kódu?



V tomto článku o git bisect se dozvíte, jak příkaz 'git bisect' pomáhá detekovat první chybné potvrzení, které zavádí chybu pomocí algoritmu binárního vyhledávání.

Můj kód fungoval dobře až do včerejška, ale až do nedávného stažení ze vzdáleného úložiště kód nezlomil !!!

Pokud jste v podobné situaci a nevíte jaká změna porušil kód nebo SZO z mnoha přispěvatelů vlastní tento chyba / funkce , pak je cesta git bisect. V tomto článku o git bisectu se tedy dozvíte, jak ‚git bisect„Příkaz přijde záchrana při detekci prvního chybného potvrzení, které zavádí chybu pomocí algoritmu binárního vyhledávání.

Témata zahrnutá v tomto článku jsou následující:





Proč používat git bisect?

Není pochyb o tom, že máte tendenci vytvářet řadu závazků pro každou menší změnu . V takovém scénáři se ladění kódu stane zdlouhavým úkolem, protože je nutné ručně přejít zpět v čase ke každé jednotlivé revizi snímku projektu, abyste mohli otestovat pracovní kód a zjistit chybu. Nyní je to ještě více komplex když máte jiné práce ke kontrole bez vedoucího bodu, nezní to příliš dobře ani požádat každého, aby si uklidil své vlastní chyby.
V průběhu procesu můžete také vytvořit a zahodit několik větví „funkcí“ (nebo oprav hotfix) v procesu a skončit s plýtváním časem a úsilím při odchýlení se od hlavní linie vývoje.



Abyste se takovým scénářům vyhnuli, můžete použítgit bisectpříkaz k vyhledání chybné revize projektu (nebo snímku) a případně jej opravit pomocígit vrátitpříkaz.

Jak vyhledává „git bisect“?



Tento příkaz půlení (rozděluje) vaši historii mezi dobrý a špatný spáchat rozsah. Ukazuje to vaše aktuální projekt Stát do a střední rozsah spáchat momentka. Příkaz git bisect se poté pohybuje každé potvrzení revize mezi tímto rozsahem a pauza na každém snímku, který vám to umožní otestujte kód . Pokud chyba existuje, deklarujete potvrzení jako špatný, pokud ne jako dobrý pokud hledání neskončí.

Syntax

git bisect

Abychom lépe porozuměli git bisect, vytvořme projekt, který vyvíjí kód pro jednoduchou navigační aplikaci pro použití v autě.

Počáteční nastavení projektu

Chcete-li vytvořit projekt, který vyvíjí kód pro jednoduchou navigační aplikaci pro použití v automobilu, můžete postupovat podle následujících kroků:

Krok 1: Vytvořte nový adresář ve složce $ HOME:

cd $ HOME mkdir my_nav_app

Krok 2: Přejděte do nového adresáře:

cd $ my_nav_app

Krok 3: Naklonujte a stáhněte projekt z mé stránky GitHub:

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

Nyní pochopme adresáře projektu a rozložení souborů, jak je vytištěno příkazem:ls -lTR

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

Dále se podívejme na deník historie projektu, abychom si prohlédli závazky, které jsem provedl za účelem vygenerování tohoto kódu -

Například jednoduchý příkaz git log vytiskne historii podrobně, ale rád bych ji pěkně naformátoval a přizpůsobil. Tím nám dovolte nastavit alias název - ‚hist ' za použití git alias příkaz, jak je znázorněno níže:

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

Nyní provedu tuto funkci opravy chyb v samostatné větvi, aby nezasahoval do hlavního vývoje ve větvi ‚hlavní '. Postupujte podle níže uvedené sady příkazů:

  • Vytvořit větev „dev“: [pán] $git větev dev
  • Přepnout na větev „dev“: $git pokladna dev
  • Seznam protokolů historie: [dev] $jdi hist[Poznámka: Zde je použit příkaz „alias“]

co ide použít pro java

Dále jsem zdůraznil poslední známé dobré potvrzení, které vím, ve kterém můj skript fungoval dobře s očekávanými výsledky testovacích případů, tento snímek potvrzení je označeno jako v1.0.

Nyní tedy, když známe naše poslední dobré potvrzení, pojďme v tomto článku o „git bisect“ pokračovat a otestovat aplikaci.

Vyzkoušejte aplikaci

Spusťte skript jako - $./scripts/myApplication.sh[testování poprvé]



Je zřejmé, že můj současný stav projektu je v chyba „a nejsem si jistý, jakou změnu jsem provedl při spáchání, které tuto změnu zavedlo. V dalším článku o git bisect se tedy podívejme, jak identifikovat špatné spáchání.

Identifikace špatného spáchání

Chcete-li začít kontrolovat špatné potvrzení, postupujte podle následujících kroků:

  • Spusťte příkaz bisect :git bisect start
  • Uveďte špatné ID potvrzení: git bisect bad HEADnebogit bisect c5b3ca8
  • Uveďte ID posledního známého dobrého potvrzení: git bisect good v1.0nebogit bisect 93859d8

Toto půlí historii revizí zhruba mezi dobrými a špatnými revizemi, které nás přivádějí k id revize: f61a7e8

Příkaz proto zkontroloval verzi projektu, jak byla v tomto ID potvrzení. Nyní pojďme a znovu otestujeme naši aplikaci.

Příkaz ke spuštění aplikace : $./scripts/myApplication.sh[testování podruhé]


Od aplikace prošel v tomto potvrzení není tento závazek rozhodně špatný. Dále musíte o příkazu bisect informovat totéž jako - $git bisect dobrý


To dále zúží výsledek hledání na první polovinu rozsahu, jak je znázorněno -


Znovu otestujte svou aplikaci - Příkaz: $./scripts/myApplication.sh[testování potřetí]


Jelikož vidíme chybu, jak je uvedeno výše, jedná se o špatné potvrzení.

Dejte vědět příkazu bisect, spusťte $git bisect špatný


Tím se vyhledávání dále zúží a dostanete se k poslední modré obklopené střední revizi: a6ac769

Testuji tedy svoji aplikaci naposledy pomocí stejného příkazu: $./scripts/myApplication.sh[testování počtvrté]

Nyní, protože aplikace znovu selhala, je to stále špatné potvrzení. Pojďme tedy spustit následující příkaz:

Spusťte příkaz: git bisect špatný

Nalezeno špatné potvrzení

Tím se uzavírá jediný poslední závazek, který zbývá -


Takže víte, že právě tady se kód zlomil. Co dále?

Pochopte, v jakém souboru byla chyba

V tomto případě vám výstup poskytne minimální informace o ID potvrzení , jméno autora a datum vzniku spolu s potvrzení zprávy a cesta který byl upraven.

Pokud chcete ladit dále, musíte číst the spáchat id objekt .

Příkaz: git show a6ac76994b3f6c7519204f910fc787b7928cf8ef

Tím se načte objekt potvrzení a vytiskne se zpráva protokolu a textový rozdíl.

Můžete také použít příkaz ‚git blame 'k analýze toho, jak a ve kterém potvrzení byl každý řádek změněn kterým autorem, spusťte příkaz jako:git vina kód / develop_nav.sh

Zastavte hledání

Hledání zastavíte pomocí následujícího příkazu:

Příkaz: git bisect reset


Proces půlení je tedy zastaven a vy jste zpět na větvi, ze které jste zahájili vyhledávání. Dalším krokem je oprava nebo ladění kódu.

Jak opravit / ladit kód?

Existuje několik řešení, která můžete udělat, abyste opravili současný stav projektu, když jste identifikovali potvrzení, které chybu přineslo.
Pokud však měníte potvrzení na a sdílené úložiště to je nejlepší vrátit se změna pomocí ‚ git vrátit „Příkaz.

Úkol: Vrátit změny provedené zmíněným špatným potvrzením

Příkaz: git revert a6ac769

Výsledkem bylo, že vrácení změn provedených tímto potvrzením způsobilo dvě věci:

  • Odstranilo poslední 3 přidané řádky (označené zeleně) a přidalo odstraněnou linku (označené červeně) zpět. (zadní strana a6ac769)
  • Vytvořil další potvrzení s informacemi o vrácené zprávě

'Příkaz Vrátit také usnadňuje sledování změn, které jste vrátili od původního potvrzení.'

Použijte 'ukázat' příkaz znovu načíst ID objektu, jako např.

Příkaz: git show 801f029

periodická tabulka nástrojů devops

Nyní pokračujte a otestujte aplikaci. Provede se správně.

Příkaz: $./scripts/myApplication.sh

Naproti tomu, pokud chcete odstranit chybné potvrzení z historie:

  • Můžete použít git reset „Příkaz pomocí“--tvrdý”(I když se to ve sdíleném úložišti nedoporučuje).

  • Podívejte se na dřívější verzi jednoho souboru pomocí ‚pokladna git‚Příkaz s‘-„Možnost.

Mělo by být poznamenáno, toto provede změny pouze v místním úložišti, dokud tyto změny nepřenesete do vzdáleného úložiště. Vzhledem k tomu, že některé změny vytvářejí nové ID objektu potvrzení, jako v našem případě výše, v takových případech je normální push do vzdáleného úložiště odmítnut, protože by se historie lišila. Musíte použít ‚ git push ‚Příkaz s‘--platnost„Možnost.

Aktualizujte „hlavní“ větev

Zatímco jsem opravil chybu ve své větvi ‚dev ', mohu nyní tuto změnu sloučit s větví‚ master ‘také -

  • přepnout na „master“, příkaz:git pokladna master
  • stáhnout nejnovější aktualizace z „origin / master“ na „master“, příkaz:git pull origin
  • sloučit změny „dev“, příkaz:git sloučit obra

Vaše sloučení však může generovat konflikty, pokud existuje více závazků ze vzdáleného úložiště. Vyřešte konflikty a pokračujte ve sloučení.
Nakonec zatlačte pouze stabilní větev „master“, která se zaváže do vzdáleného úložiště, zatímco vaše špinavá práce (chyba, funkce, vylepšení) se provádí pouze na větvích funkcí, jako je v tomto příkladu „dev“.
Navíc je nejlepší přijmout logický přístup větvící strategie zefektivnit a zabezpečit proces pracovního postupu git.

Abychom to shrnuli, „git bisect“ je šikovný a užitečný příkaz, který rychle identifikovat the ID potvrzení že představen na chyba ve vašem běžícím kódu pomocí rozsáhlého binární vyhledávání logicky dělení protokoly potvrzení v polovině cesty mezi dobrý a špatný spáchat rozsah . Na závěr jste se naučili detekovat chybné spáchání a vrátit se jím provedená změna.

Kromě dílčích příkazů „dobrý“ a „špatný“ můžete k popisu stavu revize použít také výrazy jako nový a starý. Příkaz můžete spustit vícekrát a předat různé dílčí příkazy a ID revize / potvrzení, abyste identifikovali různá ID potvrzení (she-1). Alternativně lze spustit automatický testovací skript, který pomocí tohoto příkazu vytvoří nefunkční kód. Po spuštění také vyhledejte podrobný popis tohoto příkazugit bisect - pomocna terminálu. Takže, přátelé, tím končíme tento článek o Git Bisect.

Záměrem DevOps je rychlejší a spolehlivější vytváření kvalitnějšího softwaru, který vyžaduje větší komunikaci a spolupráci mezi týmy. Pokud vás tento článek zaujal, c sakra Edureka, důvěryhodná online vzdělávací společnost se sítí více než 250 000 spokojených studentů po celém světě. Kurz Certifikace Edureka DevOps pomáhá studentům pochopit, co je DevOps, a získat odborné znalosti v různých procesech a nástrojích DevOps, jako jsou Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack a GIT pro automatizaci více kroků v SDLC.

Máte na nás dotaz? Uveďte to prosím v sekci komentářů v článku „Git Bisect“ a my se vám co nejdříve ozveme.