Git bisect: Kako prepoznati napako v kodi?



V tem članku o git bisect boste izvedeli, kako ukaz git bisect pomaga pri odkrivanju prvega slabega prevzema, ki uvede napako z binarnim algoritmom iskanja.

Moja koda je delovala do včeraj, vendar šele, ko je nedavno poteg iz oddaljenega repozitorija zlomil kodo !!!

Če ste v podobni situaciji in ne veste kakšna sprememba zlomil kodo ali WHO od mnogih sodelujočih ima v lasti to napaka / funkcija , potem je git bisect vaš izhod. Torej, v tem članku o git bisect boste izvedeli, kakogit bisect‘Ukaz pride reševanje pri odkrivanju prvega slabega prevzema, ki uvede napako z uporabo binarnega algoritma iskanja.

Teme, zajete v tem članku, so naslednje:





Zakaj uporabljati git bisect?

Nobenega dvoma ni, da ponavadi ustvarite številne zaveze za vsako manjšo spremembo . V takem scenariju odpravljanje napak kode postane dolgočasno opravilo, saj se morate ročno vrniti v čas do vsake revizije posnetka projekta, da preizkusite delujočo kodo in odkrijete napako. Zdaj to postane še več zapleteno ko imate delo drugega za pregled brez vodilne točke, tudi zahtevanje, da vsak od njih popravi svoje napake, tudi ne zveni zelo izvedljivo.
Na tej poti lahko med postopkom ustvarite in zavržete tudi številne veje funkcije (ali hitrih popravkov) in na koncu zapravite čas in trud, medtem ko odstopate od glavne razvojne linije.



Torej, da se izognete takim scenarijem, lahko uporabitegit bisectukaz, da poiščete slabo revizijo projekta (ali posnetek) in jo sčasoma popravite zgit revertukaz.

Kako išče 'git bisect'?



Ta ukaz razpolovi (deli) vašo zgodovino med dobro in slab zavezati obseg. Kaže na vaše trenutno projekt država do a srednjega razreda zavezati posnetek. Nato se premakne ukaz git bisect vsak ID prevoda med tem obsegom, medtem ko pavza na vsakem posnetku, ki vam omogoča preizkusite kodo . Če napaka obstaja, prijavite objavo kot slab, če ne kot dobro razen če se iskanje konča.

Sintaksa

git bisect

Za boljše razumevanje git bisect, ustvarimo projekt, ki razvija kodo za preprosto navigacijsko aplikacijo, ki se uporablja v avtomobilu.

Začetna nastavitev projekta

Če želite ustvariti projekt, ki razvija kodo za preprosto navigacijsko aplikacijo za uporabo v avtomobilu, sledite spodnjim korakom:

Korak 1: Ustvarite nov imenik v mapi $ HOME:

cd $ HOME mkdir my_nav_app

2. korak: Pomaknite se do novega imenika:

cd $ my_nav_app

3. korak: Klonirajte, da prenesete projekt z moje strani GitHub:

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

Zdaj pa razumimo imenike projektov in postavitev datotek, kot jih natisne ukaz:ls -lTR

Postavitev izvorne kode - Git Bisect - Edureka

Nato si oglejmo dnevnik zgodovine projektov, da si ogledamo zaveze, ki sem jih naredil, da bi ustvaril to kodo -

Na primer, preprost ukaz git log podrobno natisne zgodovino, vendar rad zgodovino lepo oblikujem in prilagodim. Zato nam dovolite nastavite vzdevek - 'zgodovina' uporabljati git vzdevek ukaz, kot je prikazano spodaj:

git alias.hist 'log --pretty = format:'% C (rumeno)% h% Creset% ad | % C (zeleno)% s% Creset% C (rdeče)% d% Creset% C (modro) [% an] '--graph --decorate --date = short'

Zdaj bom to funkcijo odpravljanja napak izvedel v ločeni veji, da ne bi motil glavnega razvoja na veji 'master'. Če želite to narediti, sledite spodnjemu naboru ukazov:

  • Ustvari vejo 'dev': [mojster] $git podružnica razv
  • Preklopi na podružnico 'dev': $git checkout dev
  • Seznam dnevnikov zgodovine: [dev] $pojdi zgodov[Opomba: tukaj uporabljen ukaz ‘alias]

Nadalje sem izpostavil zadnji znani dober prevzem, za katerega vem, da je moj skript dobro deloval s pričakovanimi rezultati preizkusa, ta posnetek predavanja je označena kot v1.0.

Zdaj, ko poznamo naš zadnji dober prevzem, pojdimo naprej v tem članku o 'git bisect' in preizkusite aplikacijo.

Preizkusite aplikacijo

Zaženite skript kot - $./scripts/myApplication.sh[testiranje prvič]



Jasno je, da je moje trenutno stanje v projektu napaka in nisem prepričan, kakšno spremembo sem spremenil v kateri zavezi, ki je uvedla to spremembo. Torej, v tem članku o git bisect si poglejmo, kako prepoznati slabo objavo.

Ugotovitev slabe zaveze

Če želite začeti pregled slabe odobritve, sledite spodnjim korakom:

  • Zaženite ukaz bisect :git bisect start
  • Omenite šifro slabe odobritve: git razpolovi slabo HEADaligit bisect c5b3ca8
  • Omenite zadnji znan-dober prevzem ID: git bisect dober v1.0aligit bisect 93859d8

To razpolovi zgodovino odobritve na približno polovico med dobrimi in slabimi prevzemi, kar nas pripelje do id-ja predaje: f61a7e8

Zato je ukaz preveril različico projekta, kakršna je bila v tem ID-ju odobritve. Zdaj pa nadaljujmo in znova preizkusite svojo prijavo.

Ukaz za zagon aplikacije : $./scripts/myApplication.sh[testiranje drugič]


Od prijave opravil v tem prevzemu ta prevzem zagotovo ni slab prevzem. Nato morate ukazu bisect sporočiti enako kot - $git razpolovi dobro


Zdaj bo to še bolj zožilo rezultat iskanja v prvo polovico obsega, kot je prikazano -


Znova preizkusite svojo aplikacijo - ukaz: $./scripts/myApplication.sh[testiranje tretjič]


Ker vidimo napako kot zgoraj, gre za slabo objavo.

Povejte bisect ukaz, zaženite $git bisect slabo


To še bolj zoži iskanje in vas pripelje do zadnje modro obkrožene srednje revizije: a6ac769

Torej, svojo aplikacijo še zadnjič preizkusim z istim ukazom: $./scripts/myApplication.sh[testiranje četrtič]

Ker je aplikacija spet odpovedala, je še vedno slaba obveznost. Torej, zaženimo naslednji ukaz:

Zaženite ukaz: git bisect slabo

Najden je bil neveljaven prevzem

S tem je zaključena edina zadnja obveza, ki je še vedno slaba


Torej veste, da se je tu koda zlomila. Kaj je naslednje?

Razumevanje, v kateri datoteki je bila napaka

V tem primeru vam izhodni podatki dajo minimalne informacije o ID prevoda , ime avtorja , in datum avtorja skupaj z sporočilo objave in pot ki je bil spremenjen.

Če želite nadalje odpraviti napake, morate preberite predmet predmeta id .

Ukaz: git show a6ac76994b3f6c7519204f910fc787b7928cf8ef

To bo prebralo objekt predaje in natisnilo sporočilo dnevnika in besedilno razliko.

Uporabite lahko tudi ukaz 'git krivde', da analizirate, kako in v kateri objavi je kateri avtor spremenil vsako vrstico, zaženite ukaz kot:git krivda / razvijaj_nav.š

Ustavite iskanje

Če želite ustaviti iskanje, uporabite naslednji ukaz:

omejitve v sqlu s primerom

Ukaz: ponastavitev git bisect


Tako se postopek bisekcije ustavi in ​​ste spet na veji, s katere ste začeli iskanje. Naslednji korak je popravljanje ali odpravljanje napak kode.

Kako popraviti / odpraviti napako kode?

No, obstaja nekaj rešitev, ki jih lahko storite, da popravite trenutno stanje projekta, ko ste prepoznali prevzem, ki je najprej povzročil napako.
Če pa spreminjate prevzem v a skupno skladišče najbolje je povrniti sprememba z uporabo git revert ‘Ukaz.

Naloga: Razveljavi spremembe, ki jih je storil omenjeni slabi prevzem

Ukaz: git revert a6ac769

Kot rezultat, je razveljavitev sprememb, ki jih je naredil ta prevzem, naredil dve stvari:

  • Izbrisala je zadnje 3 dodane vrstice (označene z zeleno) in črtano vrstico (označena z rdečo) vrnila nazaj. (hrbtna stran a6ac769)
  • Ustvaril dodatno objavo s podatki o povratnem sporočilu

'Ukaz za vrnitev tudi olajša sledenje spremembi, ki ste jo povrnili iz prvotne odobritve'

Uporabi 'Pokazati' znova ukaz za branje id predmeta, na primer

Ukaz: git show 801f029

Zdaj pa pojdite naprej in preizkusite aplikacijo. Izvedel se bo pravilno.

Ukaz: $./scripts/myApplication.sh

Če želite iz zgodovine odstraniti slabo objavo:

  • Lahko uporabite ponastavitev gita „Ukaz z“- trdo'(Čeprav ni priporočljivo v skupnem skladišču).

  • Oglejte si starejšo različico ene datoteke s pomočjogit checkout'Ukaz z'-‘Možnost.

Upoštevati je treba, da se bodo spremembe izvajale samo v vašem lokalnem repozitoriju, dokler jih ne potisnete v oddaljeno repozitorij. Ker nekatere spremembe ustvarijo nov ID predmeta predaje, kot v našem primeru zgoraj, je v takšnih primerih običajni potisk v oddaljeno repozitorij zavrnjen, saj bi se zgodovina razlikovala. Uporabiti morate git push 'Ukaz z'- sila‘Možnost.

Posodobi vejo »master«

Medtem ko sem odpravil napako na svoji veji ‘dev’, lahko zdaj to spremembo združim z vejo ‘master’ tudi -

  • preklopi na 'master', ukaz:git checkout mojster
  • povlecite najnovejše posodobitve iz 'origin / master' v 'master', ukaz:izvor git pull
  • spajanje sprememb »dev«, ukaz:git merge velikan

Vendar pa lahko vaša združitev povzroči konflikte, če je v oddaljenem repozitoriju več prevzemov. Odpravite konflikte in nadaljujte z združitvijo.
Nazadnje v oddaljeno repozitorij potisnite samo stabilne zaveze 'master', medtem ko umazano delo (napake, funkcije, izboljšave) opravite samo na vejah funkcij, kot je 'dev' v tem primeru.
Poleg tega je najbolje sprejeti logično strategija razvejanja za poenostavitev in zaščito vašega procesa dela git.

Če povzamem, 'git bisect' je priročen in koristen ukaz, ki hitro prepoznati ID prevoda to predstavljen do napaka v vaši teče kodi s pomočjo obsežne binarno iskanje logično delitev dnevniki odobritve na pol poti med dobro in slab zavezati obseg . Za konec sem se naučil zaznati napačna zaveza in povrniti sprememba, ki jo je

Poleg tega lahko za podreje 'dobro' in 'slabo' za opis stanja popravkov uporabite tudi izraza, kot sta nov in star. Ukaz lahko zaženete večkrat, tako da posredujete različne podkomande in revidirate / predate ID-je, da identificirate različne ID-je odobritve (she-1). S tem ukazom lahko zaženete tudi samodejni preizkusni skript za izdelavo pokvarjene kode. Poiščite tudi podroben opis tega ukaza z zagonomgit bisect --helpna terminalu. Ljudje s tem smo končali ta članek o Git Bisect.

Namen DevOps je ustvariti kakovostnejšo programsko opremo hitreje in z večjo zanesljivostjo, hkrati pa povabiti k večji komunikaciji in sodelovanju med skupinami. Če vas ta članek zanima, c poglej Edureka, zaupanja vredno podjetje za spletno učenje z mrežo več kot 250.000 zadovoljnih učencev, razširjenih po vsem svetu. Tečaj Edureka DevOps Certification Training pomaga učencem, da razumejo, kaj je DevOps, in pridobijo strokovno znanje v različnih procesih in orodjih DevOps, kot so Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack in GIT za avtomatizacijo več korakov v SDLC.

Imate vprašanje za nas? Prosimo, omenite ga v oddelku za komentarje v članku 'Git Bisect' in kmalu se vam bomo oglasili.