Git bisect: Kuinka tunnistaa virheen koodissasi?



Tässä artikkelissa git bisect, miten git bisect -komento auttaa havaitsemaan ensimmäisen virheellisen virheen binaarihakualgoritmilla.

Koodini toimi hyvin eiliseen asti, mutta vasta, kun äskettäinen vetäminen etätietovarastosta rikkoi koodin !!!

Jos olet samanlaisessa tilanteessa etkä tiedä mikä muutos rikkoi koodin tai WHO monista kirjoittajista omistaa Tämä vika / ominaisuus , sitten git bisect on tie ulos. Joten tässä artikkelissa git bisect opit kuinkagit bisect'Komento tulee pelastus havaita ensimmäinen virheellinen virhe, joka esittelee virheen binaarihakualgoritmin avulla.

Tämän artikkelin aiheet ovat seuraavat:





Miksi käyttää git bisectia?

Ei ole epäilystäkään siitä, että sinulla on tapana luoda useita sitoumuksia jokaiselle pienelle muutokselle . Tällaisessa tilanteessa koodin virheenkorjauksesta tulee ikävä tehtävä, koska joudut palaamaan manuaalisesti ajassa taaksepäin projektin tilannekuvan jokaisessa yksittäisessä versiossa toimivan koodin testaamiseksi ja virheen havaitsemiseksi. Nyt tämä saa vieläkin enemmän monimutkainen Kun sinulla on toisen työn tarkastettavaksi ilman lyijypistettä, myös pyytämällä jokaista puhdistamaan omat virheensä, ei myöskään kuulosta kovin toteutettavalta.
Matkan varrella saatat myös luoda ja hylätä useita 'ominaisuus' (tai korjaustiedostoja) haaroja prosessissa ja tuhlata aikaa ja vaivaa poikkeamalla pääkehityksestä.



Joten, välttääksesi tällaisia ​​tilanteita, voit käyttäägit bisectkomento löytää huono projektiversio (tai tilannekuva) ja lopulta korjata segit palaakomento.

Kuinka 'git bisect' hakee?



Tämä komento puolittaa (jakaa) historiasi hyvä ja huono tehdä alue. Se osoittaa sinun nykyinen projekti osavaltio a keskitason tehdä tilannekuva. Git bisect -komento siirtyy sitten läpi jokainen sitoutumistunnus välillä tauko jokaisessa otoksessa, jotta voit testaa koodi . Jos virhe on olemassa, ilmoitat sitoutumisesta huono, ellei niin hyvä ellei haku loppu.

Syntaksi

git bisect

Ymmärtääksemme git bisectin paremmin luomalla projektin, joka kehittää koodin yksinkertaiselle navigointisovellukselle käytettäväksi autossa.

Alustava projektin määritys

Voit luoda projektin, joka kehittää autossa käytettävän yksinkertaisen navigointisovelluksen koodin, noudattamalla seuraavia ohjeita:

Vaihe 1: Luo uusi hakemisto $ HOME -kansioon:

cd $ HOME mkdir my_nav_app

Vaihe 2: Siirry uuteen hakemistoon:

cd $ my_nav_app

Vaihe 3: Kloonaa projekti ladataksesi GitHub-sivultani:

git-klooni https://github.com/divyabhushan/my_nav_app.git

Ymmärretään nyt projektin hakemistot ja tiedostojen asettelu komennon tulostamalla tavalla:ls -TR

Lähdekoodiasettelu - Git Bisect - Edureka

Seuraavaksi katsotaan projektihistorian päiväkirjaa, jotta voimme tarkastella tekemiäni sitoumuksia tämän koodin luomiseksi.

Esimerkiksi yksinkertainen git-lokikomento tulostaa historian yksityiskohtaisesti, mutta haluan melko muotoilla ja mukauttaa historiaa. Sallikaa meidän sitten aseta aliaksen nimi - ”hist” käyttämällä git alias komento alla olevan kuvan mukaisesti:

git alias.hist 'log --pretty = format:'% C (keltainen)% h% Creset% ad | % C (vihreä)% s% Creset% C (punainen)% d% Creset% C (sininen) [% an] '--graafi - sisustus - päiväys = lyhyt'

Suoritan nyt tämän virheenkorjausominaisuuden erillisessä haarassa, jotta en häiritse pääkoneen pääkehitystä. Voit tehdä sen seuraamalla seuraavia komentoja:

  • Luo haara 'dev': [isäntä] $git haara dev
  • Vaihda haaraan ”dev”: $git kassalle dev
  • Luettele historialokit: [dev] $mene hist[Huomaa: tässä käytetään alias-komentoa]

Lisäksi olen korostanut viimeisen tunnetun hyvän sitoutumisen, jonka tiedän, että käsikirjoitukseni toimi hyvin odotettujen testitulosten kanssa, tämä sitoutumisen tilannekuva on merkitty kuten v1.0.

Joten nyt, kun tiedämme viimeisen hyvän sitoutumisemme, mennään eteenpäin tässä artikkelissa 'git bisect' ja testataan sovellusta.

Testaa sovellus

Suorita komentosarja muodossa - $./scripts/myApplication.sh[testataan ensimmäistä kertaa]



Nykyinen projektitilani on selvästi virhe , enkä ole varma, minkä muutoksen tein sitoumuksessa, joka toi tämän muutoksen. Joten seuraavaksi tässä artikkelissa git bisect, katsotaanpa, kuinka tunnistaa huono sitoutuminen.

Huonon sitoutumisen tunnistaminen

Aloita huono sitoutuminen, noudata seuraavia ohjeita:

  • Käynnistä bisect-komento :git bisect start
  • Mainitse huono sitoutumistunnus: git puolittele huono päätaigit bisect c5b3ca8
  • Mainitse viimeinen tunnettu-hyvä-sitoutumistunnus: git puolittele hyvä v1.0taigit puolittele 93859d8

Tämä puolittaa sitoumushistoria-alueen noin puolivälissä hyvien ja huonojen sitoumusten välillä, mikä vie meidät sitoutumistunnukseen: f61a7e8

Siksi komento on tarkistanut projektiversion sellaisenaan kuin tämä sitoutumistunnus. Nyt, mennään eteenpäin ja testataan sovellustamme uudelleen.

Käynnistä sovellus komennolla : $./scripts/myApplication.sh[testataan toista kertaa]


Sovelluksesta lähtien ohitettu tässä sitoumuksessa tämä sitoumus ei todellakaan ole huono sitoumus. Joten seuraavaksi sinun on ilmoitettava sama bisect-komennolle kuin - $git bisect hyvä


Nyt tämä kaventaa hakutuloksia edelleen alueen ensimmäiselle puoliskolle, kuten on esitetty -


Testaa sovellustasi uudelleen - Komento: $./scripts/myApplication.sh[testataan kolmannen kerran]


Joten, koska näemme virheen kuten edellä, tämä on huono sitoutuminen.

Kerro bisect-komennolle, suorita $git bisect huono


Se kaventaa hakua entisestään ja tuo sinut viimeiseen siniseen ympäröityyn keskiversioon: a6ac769

projektin seuranta- ja valvontasuunnitelma

Joten testaan ​​sovellukseni viimeisen kerran samalla komennolla: $./scripts/myApplication.sh[testataan neljännen kerran]

Koska sovellus epäonnistui jälleen, se on silti huono sitoutuminen. Joten, anna suorittaa seuraava komento:

Suorita komento: git bisect huono

Löytyi huono sitoutuminen

Tämä päättää ainoan jäljellä olevan sitoutumisen, joka on huono


Joten tiedät, että koodi rikkoi. Mitä seuraavaksi?

Ymmärrä mitä tiedostossa vika oli

Tässä tapauksessa lähtö antaa sinulle vähän tietoa sitoutumistunnus , tekijän nimi , ja kirjoittajan päivämäärä kanssa sitoutumisviesti ja polku sitä muokattiin.

Jos haluat debugoida edelleen, sinun on lukea sitoa id-objekti .

Komento: git show a6ac76994b3f6c7519204f910fc787b7928cf8ef

Tämä lukee sitoutumisobjektin ja tulostaa lokiviestin ja tekstieron.

Voit myös käyttää 'git blame' -komentoa analysoidaksesi, miten ja missä sitoutumisessa kukin rivi muutti jokainen kirjoittaja, suorita komento seuraavasti:git syyttää koodia / develop_nav.sh

Lopeta haku

Pysäytä haku käyttämällä seuraavaa komentoa:

Komento: git bisect reset


Tällöin puolittamisprosessi pysäytetään ja olet taas haarassa, josta aloitit haun. Seuraava vaihe on koodin korjaaminen tai virheenkorjaus.

Kuinka korjata / virheenkorjaus koodi?

No, on olemassa muutama kiertotapa, jonka voit tehdä korjataaksesi projektin nykytilan nyt, kun olet tunnistanut virheen tuoman sitoutumisen.
Jos kuitenkin muutat sitoumusta a jaettu arkisto se on parasta palata muutos git palaa ”Komento.

Tehtävä: Palauta mainitun huonon sitoutumisen tekemät muutokset

Komento: git revert a6ac769

matriisin pituus javascript-muodossa

Tämän seurauksena tämän sitoutumisen tekemien muutosten palauttaminen teki kaksi asiaa:

  • Se poisti viimeiset 3 lisättyä riviä (merkitty vihreällä) ja lisäsi poistetun rivin (merkitty punaisella) takaisin. (käänteinen a6ac769: stä)
  • Luonut ylimääräisen sitoutumisen palautusviestitiedoilla

'Palauta-komento myös helpottaa alkuperäisestä sitoutumisesta palauttamasi muutoksen seuraamista'

Käytä 'näytä' komento uudelleen lukea objektitunnus, kuten so-

Komento: git-esitys 801f029

Mene nyt ja testaa sovellusta. Se toimii oikein.

Komento: $./scripts/myApplication.sh

Sitä vastoin, jos haluat poistaa huonon sitoutumisen historiasta:

  • Voit käyttää git nollaus 'Komento--kova”-Vaihtoehtoa (vaikka sitä ei suositella jaetussa arkistossa).

  • Tarkista yksittäisen tiedoston aiempi versio käyttämällägit kassalle'Komento-Vaihtoehto.

On huomattava, että tämä tekee muutoksia vain paikalliseen arkistoon, kunnes siirrät muutokset etätietovarastoon. Koska jotkin muutokset luovat uuden sitoutumisobjektin id: n, kuten edellisessä tapauksessa, tällaisissa tapauksissa normaali etätallennustietoväline hylätään, koska historia olisi eronnut. Sinun on käytettävä git push 'Komento--pakottaaVaihtoehto.

Päivitä päähaara

Vaikka korjasin virheen dev-haaralleni, voin nyt yhdistää tämän muutoksen myös ”master” -haaraan-

  • vaihda päällikölle, komento:git kassan päällikkö
  • vedä viimeisimmät päivitykset alkuperästä / päällikkö päälliköksi, komento:git pull alkuperä
  • yhdistä dev-muutokset, komento:git sulautua jättiläinen

Yhdistäminen voi kuitenkin aiheuttaa ristiriitoja, jos etätallennustiedostosta on tehty enemmän muutoksia. Ratkaise ristiriidat ja jatka yhdistämistä.
Lopuksi, työnnä vain vakaa ”päähaara”, joka sitoutuu etätietovarastoon, kun likainen työsi (vika, ominaisuudet, parannukset) tehdään vain tämän ominaisuuden haaroille, kuten ”dev” tässä esimerkissä.
Lisäksi on parasta omaksua looginen haarautumisstrategia virtaviivaistaa ja suojaa git-työnkulun prosessi.

Yhteenvetona: 'git bisect' on kätevä ja hyödyllinen komento nopeasti tunnistaa sitoutumistunnus että otettu käyttöön että vika juoksukoodissasi kattavan avulla binaarihaku loogisesti jakaminen sitoutumislokit puolivälissä hyvä ja huono tehdä alue . Lopuksi olet oppinut havaita viallinen sitoutuminen ja palata sen tekemä muutos.

Lisäksi alikomentoihin ”hyvä” ja ”huono” voit myös käyttää termejä kuten uusi ja vanha kuvaamaan versiotilaa. Voit suorittaa komennon useita kertoja välittämällä erilaisia ​​alikomentoja ja tarkistus- / sitoutumistunnuksia tunnistaaksesi erilaiset sitoutumis- (she-1) -tunnukset. Vaihtoehtoisesti voidaan suorittaa automaattinen testiskripti rikkinäisen koodin rakentamiseksi tällä komennolla. Etsi myös yksityiskohtainen kuvaus tästä komennosta suorittamallagit bisect --apuaterminaalissa. Joten, ihmiset tämän kanssa olemme päättäneet tämän artikkelin Git Bisectistä.

DevOpsin tarkoituksena on luoda laadukkaampia ohjelmistoja nopeammin ja luotettavammin samalla kutsumalla tiimien välistä suurempaa viestintää ja yhteistyötä. Jos tämä artikkeli kiehtoo sinua, c helvetti Edureka, luotettava verkko-oppimisyritys, jolla on yli 250 000 tyytyväisen oppijan verkosto, joka levisi ympäri maailmaa. Edureka DevOps -sertifiointikoulutuskurssi auttaa oppijoita ymmärtämään DevOpsia ja saa asiantuntemusta erilaisista DevOps-prosesseista ja työkaluista, kuten Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack ja GIT SDLC: n useiden vaiheiden automatisoimiseksi.

Onko sinulla kysymys meille? Mainitse se 'Git Bisect' -artikkelin kommenttiosassa, niin palaamme asiaan ASAP: ssä.