Git bisect: Kā noteikt kļūdu jūsu kodā?



Šajā rakstā par git bisect uzziniet, kā komanda ‘git bisect’ palīdz noteikt pirmo slikto izdarīšanu, kas ievieš kļūdu, izmantojot binārā meklēšanas algoritmu.

Mans kods līdz vakar darbojās labi, bet tikai līdz nesenam attālinātās krātuves izvilkšanai kods tika salauzts !!!

Ja esat līdzīgā situācijā un nezināt kādas izmaiņas pārkāpa kodu vai PVO no daudziem līdzautoriem pieder šo kļūda / funkcija , tad git bisect ir jūsu izeja. Tātad, šajā rakstā par git bisect jūs uzzināsiet, kāgit bisect‘Nāk komanda glābšana, atklājot pirmo slikto izdarīšanu, kas ievieš kļūdu, izmantojot binārā meklēšanas algoritmu.

Šajā rakstā ietvertās tēmas ir šādas:





Kāpēc izmantot git bisect?

Nav šaubu par to, ka jums ir tendence izveidot vairākas saistības par katru nelielu izmaiņu . Šādā gadījumā koda atkļūdošana kļūst par garlaicīgu uzdevumu, jo jums ir manuāli jāatgriežas laikā pie katras projekta momentuzņēmuma pārskatīšanas, lai pārbaudītu darba kodu un atklātu kļūdu. Tagad tas kļūst vēl vairāk komplekss Arī tad, kad jums ir jāpārbauda cits darbs bez vadošā punkta, arī lūgt katram pašam iztīrīt savas kļūdas, tas nešķiet ļoti iespējams.
Ceļā jūs varat arī izveidot un izmest vairākas “iezīmju” (vai labojumfailu) filiāles šajā procesā un galu galā tērēt laiku un pūles, atkāpjoties no galvenās attīstības līnijas.



Tātad, lai izvairītos no šādiem scenārijiem, varat izmantotgit bisectkomandu atrast slikto projekta pārskatīšanu (vai momentuzņēmumu) un galu galā salabot to argit atgrieztieskomandu.

Kā meklē “git bisect”?



Šī komanda divpusēji (sadala) savu vēsturi starp labi un slikti apņemties diapazons. Tas norāda uz jūsu strāva projektu Valsts uz a vidējā diapazona apņemties momentuzņēmums. Pēc tam pārvietojas git bisect komanda katra apņemšanās id starp šo diapazonu, kamēr apstājoties katrā momentuzņēmumā, lai jūs varētu pārbaudīt kodu . Ja kļūda pastāv, jūs deklarējat saistību kā slikti, ja ne kā labi ja vien meklēšana nebeidzas.

Sintakse

git bisect

Lai labāk izprastu git bisect, izveidosim projektu, kas izstrādā vienkāršas navigācijas lietotnes kodu, ko izmantot automašīnā.

Sākotnējā projekta iestatīšana

Lai izveidotu projektu, kas izstrādā vienkāršas navigācijas lietotnes kodu, ko izmantot automašīnā, varat veikt šādas darbības:

1. darbība: Izveidojiet jaunu direktoriju mapē $ HOME:

cd $ HOME mkdir my_nav_app

2. darbība: Pārejiet uz jauno direktoriju:

cd $ my_nav_app

3. solis: Klonējiet, lai lejupielādētu projektu no manas GitHub lapas:

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

Tagad ļaujiet mums saprast projekta direktorijus un failu izkārtojumu, kā izdrukāts ar komandu:ls -lTR

Pirmkoda izkārtojums - Git Bisect - Edureka

Pēc tam apskatīsim projekta vēstures žurnālu, lai apskatītu apņemšanos, ko es veicu, lai ģenerētu šo kodu.

Piemēram, vienkārša git log komanda detalizēti izdrukā vēsturi, tomēr man patīk diezgan formatēt un pielāgot vēsturi. Tādējādi ļaujiet mums iestatīt aizstājvārdu - “hist” izmantojot git alias komandu, kā parādīts zemāk:

git alias.hist 'log - diezgan = formāts:'% C (dzeltens)% h% Creset% ad | % C (zaļš)% s% Creset% C (sarkans)% d% Creset% C (zils) [% an] '--graph --decorate --date = short'

Tagad es veikšu šo kļūdu labošanas funkciju atsevišķā filiālē, lai netraucētu galvenajai filiāles ‘master’ attīstībai. Lai to izdarītu, rīkojieties šādi:

  • Izveidot filiāli ‘dev’: [meistars] $git filiāles dev
  • Pārslēgties uz filiāli ‘dev’: $git izrakstīšanās dev
  • Uzskaitiet vēstures žurnālus: [dev] $iet hist[Piezīme: šeit tiek izmantota komanda “alias”.

Turklāt es esmu izcēlis pēdējo zināmo labo apņemšanos, ko es zinu, kurā mans skripts darbojās lieliski, ar paredzamajiem testa gadījumu rezultātiem, šis apņemšanās momentuzņēmums ir atzīmēts kā v1.0.

Tātad, tagad, kad mēs zinām savu pēdējo labo apņemšanos, dodieties uz priekšu šajā rakstā par ‘git bisect’ un pārbaudiet lietojumprogrammu.

Pārbaudiet lietojumprogrammu

Palaidiet skriptu kā - $./scripts/myApplication.sh[pārbaudīt pirmo reizi]



Skaidrs, ka mans pašreizējais projekta stāvoklis ir kļūda , un es neesmu pārliecināts, kādas izmaiņas es izdarīju, veicot saistības, kas ieviesa šīs izmaiņas. Tātad, nākamais šajā rakstā par git bisect, ļaujiet mums uzzināt, kā identificēt slikto izdarīšanu.

Sliktas izdarīšanas identificēšana

Lai sāktu pārbaudīt, vai nav izdarīta slikta saistība, veiciet šādas darbības:

  • Sāciet komandu bisect :git divpusējs sākums
  • Pieminiet sliktās saistības ID: git bisect slikta GALVAvaigit bisect c5b3ca8
  • Pieminiet pēdējo zināmo labo saistību ID: git divpusēji labs v1.0vaigit bisect 93859d8

Tas sadala apņemšanās vēstures diapazonu aptuveni pusceļā starp labām un sliktām izdarībām, kas mūs noved pie apņemšanās ID: f61a7e8

Tādējādi komanda ir pārbaudījusi projekta versiju, kāda tā bija šajā saistības ID. Tagad ļaujiet mums turpināt pārbaudīt mūsu lietojumprogrammu vēlreiz.

Komanda, lai palaistu lietojumprogrammu : $./scripts/myApplication.sh[pārbaudīt otro reizi]


Kopš pieteikuma pagājis šajā apņemšanās, šī apņemšanās noteikti nav slikta izdarīšana. Tātad, pēc tam jums jāinformē komandai bisect kā - $git bisect labi


Tagad tas vēl vairāk sašaurinās meklēšanas rezultātu diapazona pirmajā pusē, kā parādīts -


Pārbaudiet savu lietojumprogrammu vēlreiz - komanda: $./scripts/myApplication.sh[pārbauda trešo reizi]


Tā kā mēs redzam kļūdu, kā norādīts iepriekš, tā ir slikta apņemšanās.

Informējiet komandu bisect, palaidiet $git bisect slikti


Tas vēl vairāk sašaurina meklēšanu un noved pie pēdējās zilās krāsas aploksnes vidējās versijas: a6ac769

Tātad, es pēdējo reizi pārbaudu savu lietojumprogrammu, izmantojot to pašu komandu: $./scripts/myApplication.sh[pārbaudīt ceturto reizi]

Tā kā lietojumprogramma atkal neizdevās, tā joprojām ir slikta apņemšanās. Tātad, ļauj izpildīt šādu komandu:

Palaidiet komandu: git bisect slikti

Atrasta slikta apņemšanās

Tas beidzas vienīgā pēdējā atliktā saistība, kas ir slikta


Tātad jūs zināt, ka tieši šeit kods izputēja. Kas tālāk?

Saprast, kurā failā bija kļūda

Šajā gadījumā izvade sniedz jums minimālu informāciju par izdarīt id , autora vārds un autora datums kopā ar izdarīt ziņojumu un ceļš tas tika modificēts.

Ja vēlaties atkļūdot tālāk, jums tas ir nepieciešams lasīt izdarīt id objektu .

Komanda: git šovs a6ac76994b3f6c7519204f910fc787b7928cf8ef

Tas nolasīs saistības objektu un izdrukās žurnāla ziņojumu un tekstuālo diff.

Varat arī izmantot komandu ‘git blame’, lai analizētu, kā un kādā saistībā katrs autors mainīja katru rindu, palaidiet komandu kā:git vainot kodu / develop_nav.sh

Pārtrauciet meklēšanu

Lai apturētu meklēšanu, izmantojiet šādu komandu:

Komanda: git bisect reset


Tādējādi dalīšanas process tiek pārtraukts, un jūs esat atgriezies filiālē, no kuras sākāt meklēšanu. Nākamais solis ir koda labošana vai atkļūdošana.

Kā salabot / atkļūdot kodu?

Nu, ir daži risinājumi, kurus jūs varētu darīt, lai labotu pašreizējo projekta stāvokli tagad, kad esat identificējis saistību, kas vispirms izraisīja kļūdu.
Tomēr, ja maināt apņemšanos veikt a kopīga krātuve tas ir labākais atgriezties izmaiņas, izmantojot ‘ git atgriezties ‘Komanda.

java kas ir vektors

Uzdevums: Atsaukt izmaiņas, kuras izdarījusi minētā sliktā apņemšanās

Komanda: git revert a6ac769

Rezultātā šīs saistības veikto izmaiņu atcelšana izdarīja 2 darbības:

  • Tas izdzēsa pēdējās 3 pievienotās rindas (norādītas zaļā krāsā) un pievienoja svītroto (norādītas sarkanā krāsā) atpakaļ. (a6ac769 reverss)
  • Izveidoja papildu saistību ar ziņojuma atcelšanu

'Komanda Atgriezt arī atvieglo izmaiņu izsekošanu, kuras atgriezāt no sākotnējās saistības'

Izmantojiet ‘Parādīt’ komandu vēlreiz, lai lasītu objekta ID, piemēram,

Komanda: git šovs 801f029

Tagad dodieties uz priekšu un pārbaudiet lietojumprogrammu. Tas tiks izpildīts pareizi.

Komanda: $./scripts/myApplication.sh

Turpretī, ja vēlaties no vēstures noņemt nepareizo saistību:

  • Jūs varētu izmantot git reset ‘Komanda ar“- grūti”Opcija (lai gan koplietojamā krātuvē nav ieteicama).

  • Pārbaudiet viena faila agrāku versiju, izmantojot ‘git kase‘Komanda ar-‘Variants.

Jāatzīmē, ka tas jūsu lokālajā repozitorijā veiks izmaiņas tikai līdz brīdim, kad izmaiņas virzīsit uz attālo repozitoriju. Tā kā dažas izmaiņas rada jaunu saistību objekta ID, kā tas ir mūsu gadījumā iepriekš, šādos gadījumos parasts push uz attālo krātuvi tiek noraidīts, jo vēsture būtu atšķirīga. Jums jāizmanto git push ‘Komanda ar- spēks‘Variants.

Atjauniniet filiāli ‘master’

Kamēr es novērsu kļūdu savā ‘dev’ filiālē, tagad šīs izmaiņas varu apvienot arī ar ‘master’ filiāli -

  • pārslēdzieties uz “master”, komandu:git kases meistars
  • velciet jaunākos atjauninājumus no “origin / master” uz “master”, komanda:git pull izcelsme
  • apvienot “dev” izmaiņas, komanda:git sapludināšanas gigants

Tomēr jūsu sapludināšana var radīt konfliktus, ja no attālās repozitorijas ir vairāk saistību. Atrisiniet konfliktus un turpiniet apvienošanu.
Visbeidzot, nospiediet tikai stabilu ‘galvenā’ atzarojumu, kas apņemas veikt attālo krātuvi, kamēr jūsu netīrais darbs (kļūda, funkcijas, uzlabojumi) tiek veikts tikai ar tādu funkciju atzariem kā šajā piemērā ‘dev’.
Turklāt vislabāk ir pieņemt loģisku atzarošanas stratēģija lai pilnveidotu un nodrošinātu savu git darbplūsmas procesu.

Rezumējot, ‘git bisect’ ir ērta un noderīga komanda, kas ātri notiek identificēt izdarīt id to ieviests uz vaina savā skriešanas kodā, izmantojot plašu binārā meklēšana loģiski dalot apņemties žurnālus pusceļā starp labi un slikti apņemties diapazons . Noslēgumā jūs iemācījāties atklāt kļūdaina apņemšanās un atgriezties tās veiktās izmaiņas.

Papildus apakškomandām “labi” un “slikti”, lai aprakstītu pārskatīšanas stāvokli, varat izmantot arī tādus terminus kā jauns un vecs. Jūs varat palaist komandu vairākas reizes, nododot dažādas apakškomandas un pārskatot / izdarot ID, lai identificētu dažādus saistības (she-1) ID. Alternatīvi, var palaist arī automatizētu testa skriptu, lai izveidotu šķelto kodu, izmantojot šo komandu. Arī palaižot atrodiet detalizētu šīs komandas aprakstugit bisect - palīdzībaterminālā. Tātad, cilvēki ar to esam nonākuši līdz šim rakstam par Git Bisect.

DevOps nolūks ir ātrāk un ar lielāku uzticamību izveidot labākas kvalitātes programmatūru, vienlaikus aicinot lielāku komunikāciju un sadarbību starp komandām. Ja jūs interesē šis raksts, c heck out Autors: Edureka, uzticams tiešsaistes mācību uzņēmums ar vairāk nekā 250 000 apmierinātu izglītojamo tīklu visā pasaulē. Edureka DevOps sertifikācijas apmācības kurss palīdz izglītojamajiem saprast, kas ir DevOps, un iegūt zināšanas dažādos DevOps procesos un rīkos, piemēram, Leļļu, Jenkins, Nagios, Ansible, Chef, Saltstack un GIT, lai automatizētu vairākus SDLC soļus.

Vai mums ir jautājums? Lūdzu, pieminējiet to raksta “Git Bisect” komentāru sadaļā, un mēs sazināsimies ar jums pēc iespējas ātrāk.