Git bisect: Hvordan identificeres en fejl i din kode?



Denne artikel om git bisect, lær hvordan kommandoen ‘git bisect’ hjælper med at opdage det første dårlige commit, der introducerer en fejl ved hjælp af binær søgealgoritme.

Min kode fungerede fint indtil i går, men ikke før et nylig træk fra fjernlageret brækkede koden !!!

Hvis du er i en lignende situation og ikke ved det hvilken ændring brød koden eller WHO ud af mange bidragydere ejer dette bug / funktion , så er git bisect din vej ud. Så i denne artikel om git bisect lærer du, hvordan 'git halveret'Kommando kommer til redning ved at opdage den første dårlige forpligtelse, der introducerer fejlen ved hjælp af den binære søgealgoritme.

Emnerne i denne artikel er som følger:





Hvorfor bruge git bisect?

Der er ingen tvivl om, at du har tendens til at oprette et antal forpligtelser for hver mindre ændring i . I et sådant scenario bliver fejlretning af koden en kedelig opgave, da du manuelt skal gå tilbage i tiden til hver enkelt revision af projektets snapshot for at teste arbejdskoden og opdage fejlen. Nu bliver dette endnu mere kompleks når du har andres arbejde til at inspicere uden et ledepunkt, lyder det heller ikke særlig muligt at bede hver om at rydde op i deres egne fejl.
Undervejs kan du også oprette og kassere et antal 'funktions' (eller hotfix) grene i processen og ende med at spilde tid og kræfter, mens du afviger fra hovedlinjen for udvikling.



Så for at undgå sådanne scenarier kan du brugegit halveretkommando for at finde den dårlige projektrevision (eller øjebliksbillede) og til sidst rette den medgit vende tilbagekommando.

Hvordan søger 'git bisect'?



Denne kommando halvere (deler) din historie mellem godt og dårligt begå rækkevidde. Det peger på din nuværende projekt stat til en mellemklasse begå øjebliksbillede. Kommandoen git bisect bevæger sig derefter igennem hvert kommit-id mellem dette interval mens pause ved hvert øjebliksbillede, så du kan test koden . Hvis fejlen findes, erklærer du forpligtelsen som dårligt, hvis ikke som godt medmindre søgningen slutter.

Syntaks

git halveret

For at forstå git bisect bedre, lad os oprette et projekt, der udvikler koden til en simpel navigationsapp, der skal bruges i en bil.

Indledende projektopsætning

For at oprette et projekt, der udvikler koden til en simpel navigationsapp, der skal bruges i en bil, kan du følge nedenstående trin:

Trin 1: Opret en ny mappe i din $ HOME-mappe:

cd $ HJEM mkdir my_nav_app

Trin 2: Naviger til den nye mappe:

cd $ my_nav_app

Trin 3: Klon for at downloade projektet fra min GitHub-side:

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

Lad os nu forstå projektmapperne og layoutet af filer som udskrevet af kommandoen:ls -lTR

Kildekodelayout - Git Bisect - Edureka

Lad os derefter se projekthistorikjournalen for at se de forpligtelser, jeg lavede for at generere denne kode-

For eksempel udskriver en simpel git-logkommando historikken i detaljer, men jeg kan godt lide at formatere og tilpasse historien. Lad os derved angiv et aliasnavn - 'hist' bruger git alias kommando som vist nedenfor:

git alias.hist 'log --pretty = format:'% C (gul)% h% Creset% ad | % C (grøn)% s% Creset% C (rød)% d% Creset% C (blå) [% an] '- graf - dekorere - dato = kort'

Nu skal jeg udføre denne bug fix-funktion i en separat gren for ikke at forstyrre hovedudviklingen på 'master' -grenen. For at gøre dette skal du følge nedenstående sæt kommandoer:

  • Opret gren 'dev': [master] $git branch dev
  • Skift til gren 'dev': $git checkout dev
  • Liste over historiklogfiler: [dev] $gå hist[Bemærk: 'alias' -kommando brugt her]

Desuden har jeg fremhævet det sidst kendte gode engagement, som jeg kender, hvor mit script fungerede fint med forventede testresultater, dette snapshot er markeret som v1.0.

Så nu vi kender vores sidste gode forpligtelse, lad os gå videre i denne artikel om 'git bisect' og teste applikationen.

Test applikationen

Kør scriptet som - $./scripts/myApplication.sh[test første gang]



Det er klart, at min nuværende projekttilstand er i fejl , og jeg er ikke sikker på, hvilken ændring jeg foretog i hvilken forpligtelse, der introducerede denne ændring. Så næste i denne artikel om git bisect, lad os se, hvordan vi identificerer den dårlige forpligtelse.

Identifikation af den dårlige forpligtelse

For at begynde at inspicere for den dårlige forpligtelse skal du følge nedenstående trin:

  • Start kommandoen bisect :git bisect start
  • Nævn det dårlige forpligtelses-id: git halveret dårligt HOVEDellergit bisect c5b3ca8
  • Nævn det sidst kendte-gode-forpligtelses-id: git bisect god v1.0ellergit bisect 93859d8

Dette halverer rækkevidden for begivenhedshistorien omtrent midt mellem de gode og dårlige forpligtelser, der bringer os til forpligtelses-id'et: f61a7e8

Derfor har kommandoen tjekket projektversionen ud, som den var i dette kommit-id. Lad os nu gå videre og teste vores ansøgning igen.

Kommando til at køre applikationen : $./scripts/myApplication.sh[test anden gang]


Siden ansøgningen bestået i denne forpligtelse er denne forpligtelse bestemt ikke den dårlige forpligtelse. Så skal du informere det samme til bisect-kommandoen som - $git halveret godt


Nu vil dette indsnævre søgeresultatet yderligere i den første halvdel af intervallet som vist -


Test din ansøgning igen - Kommando: $./scripts/myApplication.sh[test tredje gang]


Så da vi ser en fejl som ovenfor, er dette en dårlig forpligtelse.

Lad kommandoen bisect vide, kør $git halveret dårligt


Det indsnævrer yderligere søgningen og bringer dig til den sidste blå omkransede midterrevision: a6ac769

Så jeg tester min ansøgning en sidste gang ved hjælp af den samme kommando: $./scripts/myApplication.sh[test fjerde gang]

Nu, da applikationen mislykkedes igen, er den stadig en dårlig forpligtelse. Så lad os køre følgende kommando:

Kør kommandoen: git halveret dårligt

Dårlig begåelse fundet

Dette afslutter den eneste sidste forpligtelse tilbage, som er dårlig -


Så du ved, det er her koden brød. Hvad er det næste?

Forstå, hvilken fil der havde fejlen

I dette tilfælde giver output dig minimal information om begå id , forfatternavn , og forfatterdato sammen med begå besked og sti der blev ændret.

Hvis du ønsker at debugge yderligere, skal du Læs det begå id-objekt .

Kommando: git show a6ac76994b3f6c7519204f910fc787b7928cf8ef

Dette læser kommitteringsobjektet og udskriver logbeskeden og tekstdiff.

Du kan lige så godt bruge kommandoen 'git blame' til at analysere, hvordan og i hvilken forpligtelse hver linje blev ændret af hvilken forfatter, kør kommandoen som:git skyldkode / develop_nav.sh

Stop søgningen

Brug følgende kommando for at stoppe søgningen:

Kommando: git bisect reset


Således stoppes halveringsprocessen, og du er tilbage på den gren, hvorfra du startede søgningen. Nu er det næste trin at rette eller fejle koden.

Hvordan repareres / debugges koden?

Der er et par løsninger, du kan gøre for at rette den aktuelle status for projektet nu, hvor du først har identificeret det tilsagn, der bragte fejlen.
Men hvis du ændrer en forpligtelse til en delt lager det er bedst at vende tilbage ændringen ved hjælp af ' git vende tilbage 'Kommando.

Opgave: Vend de ændringer, der er foretaget ved den nævnte dårlige forpligtelse

Kommando: git revert a6ac769

Som et resultat gjorde to ting at tilbageføre de ændringer, der blev foretaget med denne forpligtelse:

  • Det slettede de sidste 3 tilføjede linjer (angivet i grønt) og tilføjede den slettede linje (angivet i rødt) tilbage. (bagside af a6ac769)
  • Oprettet en ekstra forpligtelse med oplysningerne om tilbagevendende besked

'Kommando med tilbagevenden gør det også lettere at spore den ændring, du har tilbageført fra den oprindelige forpligtelse'

Brug 'at vise' kommando igen for at læse objekt-id'et, ligesom

Kommando: git show 801f029

Gå nu frem og test applikationen. Det vil udføre korrekt.

Kommando: $./scripts/myApplication.sh

I modsætning hertil, hvis du vil fjerne den dårlige forpligtelse fra historikken:

  • Du kunne bruge ' git reset 'Kommando med '--hårdt”Mulighed (dog ikke anbefalet i et delt lager).

  • Tjek en tidligere version af en enkelt fil ved hjælp af 'git checkout'Kommando med'-' mulighed.

Det skal bemærkes, dette vil kun foretage ændringer i dit lokale lager, indtil du skubber ændringerne til et fjernt lager. Da nogle ændringer skaber nyt commit-objekt-id som i vores tilfælde ovenfor i sådanne tilfælde afvises et normalt skub til det eksterne lager, da historikken ville have afvundet. Du skal bruge ' git push 'Kommando med'--kraft' mulighed.

Opdater 'master' gren

Mens jeg fikset fejlen på min 'dev'-gren, kan jeg nu flette denne ændring også med' master'-grenen-

  • skift til 'master', kommando:git checkout master
  • træk nylige opdateringer fra 'oprindelse / master' til 'master', kommando:git pull oprindelse
  • flet 'dev' ændringer, kommando:git merge gigant

Din fusion kan dog generere konflikter, hvis der er flere forpligtelser fra det eksterne lager. Løs konflikter og fortsæt med fusionen.
Endelig skal du kun skubbe den stabile 'master' gren forpligter sig til det eksterne lager, mens du får dit beskidte arbejde (bug, funktioner, forbedringer) udført kun på funktionsgrene som 'dev' i dette eksempel.
Desuden er det bedst at vedtage en logisk forgreningsstrategi for at strømline og sikre din git-workflow-proces.

For at opsummere er 'git bisect' en praktisk og nyttig kommando, der hurtigt identificere det begå id at introduceret til fejl i din kørekode ved hjælp af en omfattende binær søgning af logisk deling Forpligtelseslogfiler halvvejs mellem godt og dårligt begå rækkevidde . Afslutningsvis lærte du det opdage den defekte forpligtelse og vende tilbage ændringen foretaget af det.

Derudover kan du til underkommandoerne 'god' og 'dårlig' også bruge udtryk som nye og gamle til at beskrive revisionstilstanden. Du kan køre kommandoen flere gange og videregive forskellige underkommandoer og revision / commit-id'er for at identificere forskellige commit (she-1) id'er. Alternativt kan der også køres et automatiseret testscript for at oprette den ødelagte kode ved hjælp af denne kommando. Find også en detaljeret beskrivelse af denne kommando ved at køregit bisect - hjælppå terminalen. Så folk med dette kommer vi til en ende på denne artikel om Git Bisect.

Hensigten med DevOps er at skabe software af bedre kvalitet hurtigere og med mere pålidelighed og samtidig invitere til større kommunikation og samarbejde mellem teams. Hvis du er fascineret af denne artikel, c heck ud af af Edureka, et pålideligt online læringsfirma med et netværk på mere end 250.000 tilfredse elever spredt over hele kloden. Edureka DevOps-certificeringskursus hjælper eleverne med at forstå, hvad der er DevOps og få ekspertise i forskellige DevOps-processer og -værktøjer såsom Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack og GIT til automatisering af flere trin i SDLC.

Har du et spørgsmål til os? Nævn det i kommentarfeltet i 'Git Bisect' -artiklen, og vi vender tilbage til dig ASAP.

hvordan man caster dobbelt til int java