Git bisect: Kuidas tuvastada viga oma koodis?

Sellest git bisecti artiklist saate teada, kuidas käsk ‘git bisect’ aitab tuvastada esimese halva soorituse, mis tutvustab viga binaarse otsingu algoritmi abil.

Minu kood toimis kuni eilseni hästi, kuid alles siis, kui hiljutine tõmbamine kaughoidlast koodi rikkus !!!

Kui olete sarnases olukorras ja ei tea mis muutus rikkus koodi või WHO paljude kaasautorite hulgast omab seda viga / funktsioon , siis on git bisect teie väljapääs. Nii saate sellest git bisecti artiklist teada, kuidasgit poolitada‘Käsk tuleb päästmine esimese vigase tuvastamise korral, mis vea tutvustab, binaarse otsingu algoritmi abil.

Selles artiklis käsitletavad teemad on järgmised:





Miks kasutada git bisecti?

Pole kahtlust, et iga väiksema muutuse korral kipute looma hulga kohustusi . Sellises stsenaariumis muutub koodi silumine tüütuks ülesandeks, kuna töötava koodi testimiseks ja vea tuvastamiseks peate projekti hetktõmmise iga üksiku redaktsiooni jaoks käsitsi tagasi minema. Nüüd saab see veelgi rohkem keeruline kui teil on teise töö, mida kontrollida ilma juhtpunktita, ei kõla ka see, kui palute kõigil oma vead puhastada.
Teel võib olla ka protsessis mitme funktsiooni (või kiirparanduse) haru loomine ja selle ära viskamine ning lõpuks raiskate aega ja vaeva, kaldudes kõrvale põhilisest arengujoonest.



Niisiis saate selliste stsenaariumide vältimiseks kasutadagit poolitadakäsk leida halb projekti redaktsioon (või hetktõmmis) ja lõpuks seegit tagasikäsk.

Kuidas ‘git bisect’ otsib?



See käsk poolitab (jagab) teie ajaloo hea ja halb pühenduma vahemik. See osutab teie praegune projekti riik kuni a keskklassi pühenduma hetktõmmis. Seejärel liigub läbi git bisect käsk iga toime ID selle vahemiku vahel paus iga hetktõmmise juures, et saaksite seda teha testi koodi . Kui viga on olemas, deklareerite kohustuse järgmiselt halb, kui mitte nii hea kui otsing ei lõpe.

Süntaks

git poolitada

Git bisecti paremaks mõistmiseks koostame projekti, mis töötab välja autos kasutatava lihtsa navigeerimisrakenduse koodi.

Projekti esialgne seadistamine

Projekti loomiseks, mis töötab välja autos kasutatava lihtsa navigeerimisrakenduse koodi, võite järgida järgmisi samme:

Samm 1: Looge oma kausta $ HOME uus kataloog:

cd $ HOME mkdir my_nav_app

2. samm: Navigeerige uude kataloogi:

cd $ my_nav_app

3. samm: Kloonige projekti minu GitHubi lehelt alla laadimiseks:

giti kloon https://github.com/divyabhushan/my_nav_app.git

Nüüd mõistame käsudega trükitud projekti katalooge ja failide paigutust:ls -lTR

Lähtekoodi paigutus - Git Bisect - Edureka

Järgmisena vaadake projekti ajaloo ajakirja, et vaadata selle koodi loomiseks tehtud kohustusi.

Näiteks prindib lihtne git logi käsk ajaloo üksikasjalikult, kuid mulle meeldib ajalugu üsna vormindada ja kohandada. Seeläbi laseme meil määrake varjunimi - ‘hist’ kasutades git alias käsk, nagu allpool näidatud:

git alias.hist 'log --pretty = format:'% C (kollane)% h% Creset% ad | % C (roheline)% s% Creset% C (punane)% d% Creset% C (sinine) [% an] '--graaf --dekoratsioon --kuupäev = lühike'

Nüüd teostan selle veaparanduse funktsiooni eraldi harus, et mitte segada ‘master’ haru põhiarendust. Selleks järgige allolevat käskude komplekti:

  • Loo haru „dev”: [kapten] $git haru dev
  • Üleminek harule „dev”: $git kassas dev
  • Lisage ajaloo logid: [dev] $mine hist[Märkus: siin kasutatakse käsku „alias”]

Lisaks olen rõhutanud viimast teadaolevat head pühendumist, mida tean, kus mu skript toimis oodatud testijuhtumi tulemustega hästi, see märgistatud kui v1.0.

Niisiis, nüüd, kui teame oma viimast head pühendumist, jätkame selles artiklis „git bisect” ja testime rakendust.

Testige rakendust

Käivitage skript kui - $./scripts/myApplication.sh[katsetan esimest korda]



On selge, et minu praegune projekti seis on viga ja ma pole kindel, millise muutuse ma oma kohustuses tegin, mis selle muudatuse sisse viis. Niisiis, järgmisena selles artiklis git bisect kohta, vaatame, kuidas tuvastada halb toime.

Halva isiku tuvastamine

Halva kohustuse kontrollimiseks järgige alltoodud samme:

  • Käivitage bisect käsk :git kahepoolne algus
  • Mainige halva toimingu ID: git poolitage halb peavõigit poolitage c5b3ca8
  • Mainige viimase teada-hea-pühendu ID: git poolitage hea v1.0võigit poolitada 93859d8

See poolitab kulukohustuste ajaloo vahemiku umbes keskel heade ja halbade kohustuste vahel, mis viib meid kohustuse ID-ni: f61a7e8

Seega on käsk kontrollinud projekti versiooni nii, nagu see oli selle pühenduse ID-s. Nüüd laseme edasi ja testige oma rakendust uuesti.

Käsk rakenduse käivitamiseks : $./scripts/myApplication.sh[testitakse teist korda]

meetod system.exit lõpetab rakenduse.


Alates rakendusest möödas selles kohustuses pole see kohustus kindlasti halb. Nii peate järgmisena teavitama käsku bisect nagu - $git poolitada hea


Nüüd kitsendab see otsingutulemit veelgi vahemiku esimesse poolde, nagu näidatud -


Testige oma rakendust uuesti - käsk: $./scripts/myApplication.sh[katsetatakse kolmandat korda]


Seega, kuna näeme ülaltoodud viga, on see halb kohustus.

Andke käsk bisect teada, käivitage $git poolitada halb


See kitsendab otsingut veelgi ja viib teid viimase sinise ümbritsetud keskmise versiooni juurde: a6ac769

Nii et testin oma rakendust veel viimast korda sama käsuga: $./scripts/myApplication.sh[testitakse neljandat korda]

Kuna rakendus uuesti ebaõnnestus, on see endiselt halb kohustus. Nii laseme käivitada järgmise käsu:

Käivitage käsk: git poolitada halb

Leiti halb toime

See lõpetab ainsana jäänud viimase kohustuse, mis on halb


Nii et teate, et siin läks kood katki. Mis edasi saab?

Mõistke, millises failis oli viga

Sel juhul annab väljund teile minimaalse teabe toime panema id , autori nimi , ja autori kuupäev koos pühendama sõnumit ja tee seda muudeti.

Kui soovite siluda veelgi, peate seda tegema lugeda toime id objekt .

Käsk: git show a6ac76994b3f6c7519204f910fc787b7928cf8ef

See loeb toiminguobjekti ja printib logisõnumi ja tekstidif.

Samuti võite kasutada käsku „git blame”, et analüüsida, kuidas ja millises pühenduses mis rida autor muutis, käivitage käsk järgmiselt:git süüdistuskood / develop_nav.sh

Lõpeta otsing

Otsingu peatamiseks kasutage järgmist käsku:

Käsk: git bisect reset


Seega poolitusprotsess peatatakse ja olete tagasi oksal, kust otsimist alustasite. Järgmine samm on koodi parandamine või silumine.

Kuidas koodi parandada / siluda?

Noh, on paar lahendust, mida saate projekti praeguse olukorra parandamiseks teha nüüd, kui olete tuvastanud kohustuse, mis tõi vea kõigepealt.
Kui muudate aga kohustust a jagatud hoidla see on parim tagasi pöörduma muutus, kasutades git tagasi ‘Käsk.

Ülesanne: Pöörake tagasi mainitud halva toimingu tehtud muudatused

Käsk: git revert a6ac769

Selle tulemusena tegi selle kohustuse tehtud muudatuste tühistamine 2 asja:

  • See kustutas viimased 3 lisatud rida (tähistatud rohelisega) ja lisas kustutatud rida (tähistatud punasega) tagasi. (a6ac769 tagakülg)
  • Lõi teate ennistamise lisakohustuse

'Käsk Ennista hõlbustab ka algsest kohustusest tagastatud muudatuste jälgimist'

Kasuta ‘Näita’ käsk uuesti, et lugeda objekti ID, nagu nii-

Käsk: git show 801f029

Nüüd minge edasi ja testige rakendust. See täidetakse korralikult.

Käsk: $./scripts/myApplication.sh

Seevastu, kui soovite halva kohustuse ajaloost eemaldada, toimige järgmiselt.

  • Võite kasutada giti lähtestamine ‘Käsk- raske”Valik (ehkki jagatud hoidlas seda ei soovitata).

  • Vaadake ühe faili varasemat versiooni, kasutades ‘git kassasse‘Käsk-‘Variant.

Tuleb märkida, et see muudab teie kohalikus hoidlas muudatusi ainult seni, kuni muudate muudatused kaughoidlasse. Kuna mõned muudatused loovad uue toimeobjekti ID, nagu ka ülalpool, siis sellistel juhtudel lükatakse kaughoidlasse tavaline tõukejõud tagasi, kuna ajalugu oleks lahknenud. Peate kasutama git push ‘Käsk- jõud‘Variant.

Uuenda haru haru

Kuigi ma parandasin vea oma dev-harul, saan nüüd selle muudatuse ka master-haruga ühendada -

  • lülita 'master' -ile, käsk:git kassade kapten
  • tõmmake hiljutised värskendused asukohast „originaal / põhi” väärtusele „põhi”, käsk:git pull päritolu
  • liida ‘dev’ muudatused, käsk:git ühendamise hiiglane

Kuid teie liitmine võib tekitada konflikte, kui kaughoidlast on tehtud rohkem toiminguid. Lahendage konfliktid ja jätkake ühendamist.
Lõpuks lükake kaughoidlasse ainult stabiilne harukontor, kui teie räpane töö (viga, funktsioonid, täiustused) tehakse ainult nende funktsioonide harude jaoks, nagu selles näites ‘dev’.
Pealegi on kõige parem omaks võtta loogiline hargnev strateegia oma sujuva töövoo protsessi sujuvamaks ja turvalisemaks muutmiseks.

Kokkuvõtteks võib öelda, et ‘git bisect’ on käepärane ja kasulik käsk, mis toimib kiiresti tuvastama toime ID seda sisse viidud kuni süü oma jooksva koodi abil ulatuslik binaarotsing loogiliselt jagamine kohustuste logid poolel teel hea ja halb pühenduma vahemik . Kokkuvõtteks sa õppisid avastama vigane toime ja tagasi pöörduma selle tehtud muudatus.

Lisaks alamkäskudele „hea” ja „halb” saate redigeerimise oleku kirjeldamiseks kasutada ka selliseid termineid nagu uus ja vana. Võite käsku käitada mitu korda, edastades erinevad alamkäsud ja muutmise / kinnitamise ID-sid, et tuvastada erinevad toimeandmise (she-1) ID-d. Selle käsu abil võib katkise koodi loomiseks käivitada ka automatiseeritud testskripti. Samuti leiate selle käsu üksikasjaliku kirjelduse käivitadesgit bisect --aitaterminalis. Nii et inimesed, sellega oleme jõudnud Git Bisecti artikli lõpuni.

DevOpsi eesmärk on luua kvaliteetsem tarkvara kiiremini ja usaldusväärsemalt, kutsudes meeskondade vahelist suuremat suhtlust ja koostööd. Kui see artikkel teid huvitab, c kurat välja autor Edureka, usaldusväärne veebiõppeettevõte, mille võrgustik koosneb enam kui 250 000 rahulolevast õppijast ja mis levib üle kogu maailma. Edureka DevOpsi sertifitseerimiskoolitus aitab õppijatel mõista, mis on DevOps, ning omandada teadmisi mitmesuguste DevOpsi protsesside ja tööriistade kohta, nagu Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack ja GIT SDLC mitme etapi automatiseerimiseks.

Kas teil on meile küsimus? Palun mainige seda artikli Git Bisect kommentaaride jaotises ja võtame teiega niipea ühendust.