Git bisect: Cum să identificați o eroare în codul dvs.?



În acest articol despre git bisect, aflați cum ajută comanda „git bisect” la detectarea primei comiteri greșite care introduce o eroare folosind algoritmul de căutare binară.

Codul meu a funcționat bine până ieri, dar nu până când o extragere recentă din depozitul de la distanță a rupt codul !!!

Dacă vă aflați într-o situație similară și nu știți ce schimbare a încălcat codul sau OMS din mulți colaboratori detine acest bug / caracteristică , atunci git bisect este calea ta de ieșire. Deci, în acest articol despre git bisect veți afla cum „git bisect‘Comanda vine la salvare în detectarea primei comiteri greșite care introduce bug-ul folosind algoritmul de căutare binară.

Subiectele tratate în acest articol sunt următoarele:





De ce să folosiți git bisect?

Nu există nicio îndoială în faptul că aveți tendința de a crea un număr de angajamente pentru fiecare modificare minoră . Într-un astfel de scenariu, depanarea codului devine o sarcină plictisitoare, deoarece trebuie să reveniți manual în timp la fiecare revizuire a instantaneului proiectului pentru a testa codul de lucru și a detecta eroarea. Acum, acest lucru devine și mai mult complex atunci când ai alte lucrări de inspectat fără un punct de plumb, de asemenea, să ceri fiecăruia să își curețe propriile greșeli, nu sună nici foarte fezabil.
Pe parcurs, s-ar putea să creați și să renunțați la o serie de ramuri de „caracteristici” (sau remediere rapidă) în acest proces și să ajungeți să pierdeți timp și efort în timp ce vă abateți de la linia principală de dezvoltare.



Deci, pentru a evita astfel de scenarii, puteți utiliza fișierulgit bisectcomanda pentru a găsi revizuirea (sau instantaneul) defectuoasă a proiectului și, în cele din urmă, să o remediați cugit revinecomanda.

Cum caută „git bisect”?



Această comandă bisectează (împarte) istoria dvs. între bun si rău comite gamă. Îți indică actual proiect stat la o gama medie comite instantaneu. Comanda git bisect se deplasează apoi fiecare comitet id între acest interval în timp ce pauză la fiecare instantaneu pentru a vă permite testați codul . Dacă bug-ul există, declarați commit-ul ca fiind rău, dacă nu așa bun dacă nu se termină căutarea.

Sintaxă

git bisect

Pentru a înțelege mai bine git bisect, permiteți-ne să creăm un proiect care dezvoltă codul pentru o aplicație simplă de navigație care să fie utilizată într-o mașină.

Configurarea inițială a proiectului

Pentru a crea un proiect care dezvoltă codul pentru o aplicație simplă de navigație care să fie utilizată într-o mașină, puteți urma pașii de mai jos:

Pasul 1: Creați un director nou în folderul dvs. $ HOME:

cd $ HOME mkdir my_nav_app

Pasul 2: Navigați la noul director:

cd $ my_nav_app

Pasul 3: Clonați pentru a descărca proiectul de pe pagina mea GitHub:

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

Acum, permiteți-ne să înțelegem directorul proiectului și aspectul fișierelor, după cum este tipărit de comandă:ls -lTR

Aspectul codului sursă - Git Bisect - Edureka

Apoi, să vedem jurnalul de istorie al proiectului pentru a vedea angajamentele pe care le-am făcut pentru a genera acest cod-

De exemplu, o simplă comandă git log tipărește istoricul în detaliu, cu toate acestea, îmi place să formatez destul și să personalizez istoricul. Prin urmare, permiteți-ne setați un nume de alias - „hist” folosind git alias comanda așa cum se arată mai jos:

git alias.hist 'log --pretty = format:'% C (galben)% h% Creset% ad | % C (verde)% s% Creset% C (roșu)% d% Creset% C (albastru) [% an] '--graph --decorate --date = short'

Acum, voi efectua această caracteristică de remediere a erorilor într-o ramură separată, pentru a nu interfera cu dezvoltarea principală a ramurii „master”. Pentru aceasta, urmați setul de comenzi de mai jos:

  • Creați „dev” sucursală: [stăpân] $git branch dev
  • Treceți la ramura „dev”: $git checkout dev
  • Enumerați jurnalele istorice: [dev] $du-te hist[Notă: comanda „alias” utilizată aici]

În plus, am evidențiat ultima confirmare bună cunoscută pe care o știu, în care scriptul meu a funcționat bine cu rezultatele așteptate ale cazului de testare, acest instantaneu de confirmare este etichetat ca v1.0.

suma cifrelor într-un java întreg

Deci, acum, după ce ne cunoaștem ultimul angajament bun, să mergem mai departe în acest articol despre „git bisect” și să testăm aplicația.

Testați aplicația

Rulați scriptul ca - $./scripts/myApplication.sh[testarea pentru prima dată]



În mod clar, starea mea actuală a proiectului este în eroare , și nu sunt sigur ce schimbare am făcut în ce comitere a introdus această modificare. Deci, în acest articol despre git bisect, haideți să vedem cum să identificăm comiterea greșită.

Identificarea comiterii rele

Pentru a începe să inspectați comiterea greșită, urmați pașii de mai jos:

  • Porniți comanda bisect :git bisect start
  • Menționați codul de comitere rău: git bisectează rău CAPsaugit bisect c5b3ca8
  • Menționați ultimul cod cunoscut-bun-commit: git bisect bun v1.0saugit bisect 93859d8

Aceasta împarte zona istoricului de comitere aproximativ la jumătatea distanței dintre comitetele bune și rele care ne duce la identificarea comiterii: f61a7e8

Prin urmare, comanda a verificat versiunea proiectului așa cum era în acest ID de comitere. Acum, permiteți-ne să testăm din nou aplicația noastră.

Comandă pentru a rula aplicația : $./scripts/myApplication.sh[testarea a doua oară]


De la aplicare a trecut în acest commit, acest commit nu este cu siguranță un commit rău. Deci, în continuare, trebuie să informați la fel comanda bisect ca - $git bisect bun

șirul java a împărțit mai mulți delimitatori


Acum, acest lucru va restrânge și mai mult rezultatul căutării în prima jumătate a intervalului, așa cum se arată -


Testați din nou aplicația dvs. - Comandă: $./scripts/myApplication.sh[testarea a treia oară]


Deci, din moment ce vedem o eroare ca mai sus, aceasta este o comitere greșită.

Anunțați comanda bisect, rulați $git bisectează rău


Acest lucru restrânge în continuare căutarea și vă aduce la ultima revizuire mijlocie înconjurată de albastru: a6ac769

Așadar, îmi testez aplicația ultima dată folosind aceeași comandă: $./scripts/myApplication.sh[testarea a patra oară]

Acum, din moment ce aplicația a eșuat din nou, este încă o comitere greșită. Deci, să executăm următoarea comandă:

Rulați comanda: git bisectează rău

A fost găsită o comitere greșită

Aceasta concluzionează singurul ultim angajament rămas care este rău-


Deci, știți că aici a rupt codul. Ce urmează?

Înțelegeți ce fișier a avut eroarea

În acest caz, ieșirea vă oferă informații minime despre comite id , numele autorului , si data autorului impreuna cu comite mesaj si cale care a fost modificat.

Dacă doriți să depanați mai departe, trebuie citit comite obiectul id .

Comanda: git show a6ac76994b3f6c7519204f910fc787b7928cf8ef

Aceasta va citi obiectul de confirmare și va imprima mesajul jurnal și diferențele text.

S-ar putea la fel de bine să utilizați comanda „git blame” pentru a analiza cum și în ce comitere a fost modificată fiecare linie de către ce autor, rulați comanda ca:git blame code / develop_nav.sh

Opriți căutarea

Pentru a opri căutarea, utilizați următoarea comandă:

Comanda: git bisect reset


Astfel, procesul de bisectare este oprit și sunteți din nou pe ramura de la care ați început căutarea. Acum, următorul pas este să remediați sau să depanați codul.

Cum se remediază / depanează codul?

Ei bine, există câteva soluții pe care le-ați putea face pentru a remedia starea actuală a proiectului acum, după ce ați identificat comiterea care a adus eroarea în primul rând.
Cu toate acestea, dacă modificați un commit pe un repozitie partajată cel mai bine este să reveni schimbarea folosind „ git revine ‘Comanda.

Sarcină: Reveniți la modificările făcute de comiterea greșită menționată

Comanda: git revert a6ac769

Drept urmare, revenirea la modificările făcute prin acest commit a făcut 2 lucruri:

  • A șters ultimele 3 linii adăugate (indicate în verde) și a adăugat înapoi linia ștearsă (indicate în roșu). (reversul lui a6ac769)
  • A fost creat un commit suplimentar cu informațiile despre mesajul de revenire

„Comanda Reveniți face, de asemenea, mai ușoară urmărirea modificării pe care ați revenit-o din comiterea inițială”

Folosește 'spectacol' comandați din nou pentru a citi ID-ul obiectului, ca

Comanda: git show 801f029

Acum, mergeți mai departe și testați aplicația. Se va executa corect.

Comanda: $./scripts/myApplication.sh

În schimb, dacă doriți să eliminați comiterea greșită din istoric:

  • Ai putea folosi „ git reset ‘Comanda cu„--greu”(Deși nu este recomandată într-un depozit partajat).

  • Verificați o versiune anterioară a unui singur fișier folosind „git checkout„Comanda cu„-' opțiune.

Trebuie remarcat, acest lucru va face modificări numai în depozitul dvs. local până când nu veți împinge modificările într-un depozit la distanță. Deoarece unele modificări creează un nou obiect de validare, ca în cazul nostru de mai sus, în astfel de cazuri, o respingere normală către depozitul la distanță este respinsă deoarece istoricul ar fi divergut. Trebuie să utilizați „ git push „Comanda cu„--forta' opțiune.

Actualizați ramura „master”

În timp ce am remediat eroarea de pe ramul meu „dev”, acum pot combina această modificare cu ramura „master”, de asemenea-

  • comutați la „master”, comandați:git checkout master
  • trageți actualizările recente de la „origine / master” la „master”, comandați:git pull origine
  • combinați modificările „dev”, comandați:git merge gigant

Cu toate acestea, îmbinarea dvs. poate genera conflicte dacă există mai multe confirmări din depozitul la distanță. Rezolvați conflictele și continuați cu fuzionarea.
În cele din urmă, împingeți numai ramura „master” stabilă care se angajează în depozitul la distanță în timp ce vă faceți munca murdară (eroare, caracteristici, îmbunătățiri) numai pe ramurile de caracteristici, cum ar fi „dev” din acest exemplu.
Mai mult, cel mai bine este să adopți o logică strategie de ramificare pentru a simplifica și securiza procesul de flux de lucru git.

Pentru a rezuma, „git bisect” este o comandă la îndemână și utilă care rapid identifica comite id acea introdus la vina în codul dvs. de rulare cu ajutorul unui extins căutare binară prin logic împărțind comiterea se înregistrează la jumătatea distanței dintre bun și rău comite gamă . În concluzie, ai învățat să faci asta detecta comiterea defectuoasă și reveni schimbarea făcută de acesta.

În plus, la subcomandele „bune” și „rele” puteți folosi și termeni precum nou și vechi pentru a descrie starea de revizuire. Puteți rula comanda de mai multe ori trecând subcomenzi diferite și identificări de revizuire / validare pentru a identifica diferite ID-uri de validare (ea-1). Alternativ, un script de test automat poate fi rulat și pentru a construi codul defect utilizând această comandă. De asemenea, găsiți o descriere detaliată a acestei comenzi rulândgit bisect --helppe terminal. Deci, oameni buni, ajungem la sfârșitul acestui articol despre Git Bisect.

ce face un iterator în java

Intenția DevOps este de a crea software de calitate mai bună mai rapid și cu mai multă fiabilitate, invitând în același timp o comunicare și o colaborare mai mari între echipe. Dacă sunteți intrigați de acest articol, c uită-te la de Edureka, o companie de învățare online de încredere, cu o rețea de peste 250.000 de elevi mulțumiți răspândiți pe tot globul. Cursul Edureka DevOps Certification Training îi ajută pe cursanți să înțeleagă ce este DevOps și să câștige expertiză în diferite procese și instrumente DevOps precum Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack și GIT pentru automatizarea mai multor pași în SDLC.

Ai o întrebare pentru noi? Vă rugăm să o menționați în secțiunea de comentarii a articolului „Git Bisect” și vă vom răspunde cât mai curând posibil.