Git bisect: Com identificar un error al vostre codi?



En aquest article sobre git bisect, obteniu informació sobre com l’ordre ‘git bisect’ ajuda a detectar la primera comissió incorrecta que introdueix un error mitjançant l’algorisme de cerca binària.

El meu codi funcionava bé fins ahir, però fins que una extracció recent del dipòsit remot va trencar el codi !!!

Si es troba en una situació similar i no ho sap quin canvi va trencar el codi o bé OMS de molts col·laboradors posseeix això error / característica , llavors git bisect és la vostra sortida. Així doncs, en aquest article sobre git bisect aprendreu comgit bisecta'Ordre arriba a rescat en detectar el primer error erroni que introdueix l'error mitjançant l'algorisme de cerca binària.

Els temes tractats en aquest article són els següents:





Per què utilitzar git bisect?

No hi ha dubte en el fet que tendeix a crear un nombre de confirmacions per a cada canvi menor a . En aquest cas, depurar el codi es converteix en una tasca tediosa, ja que heu de retrocedir manualment en el temps a cada revisió de la instantània del projecte per provar el codi de treball i detectar l’error. Ara, això es fa encara més complex quan teniu una feina d’altre per inspeccionar sense un punt d’abast, tampoc no és molt factible sol·licitar a cadascú que netegi els seus propis errors.
Al llarg del camí, també podeu crear i descartar diverses branques de 'característiques' (o revisions) en el procés i acabar perdent temps i esforç mentre us desvieu de la línia principal de desenvolupament.



Per tant, per evitar aquests escenaris, podeu utilitzar el fitxergit bisectaper trobar la revisió (o instantània) del projecte errònia i, finalment, solucionar-la amb el fitxergit revertircomandament.

Com es cerca 'git bisecta'?



Aquesta ordre bisectes (divideix) el vostre historial entre i la dolent compromís abast. Assenyala el vostre actual projecte estat a un Gamma mitjana compromís instantània. A continuació, l'ordre git bisect es mou cada identificació de compromís entre aquest interval mentre en pausa a cada instantània per permetre-ho proveu el codi . Si l'error existeix, declareu la confirmació com a dolent, si no com tret que finalitzi la cerca.

Sintaxi

git bisecta

Per entendre millor git bisect, creem un projecte que desenvolupi el codi per a una senzilla aplicació de navegació que s’utilitzi en un cotxe.

Configuració inicial del projecte

Per crear un projecte que desenvolupi el codi d'una senzilla aplicació de navegació que s'utilitzi en un cotxe, podeu seguir els passos següents:

Pas 1: Creeu un directori nou a la carpeta $ HOME:

cd $ HOME mkdir my_nav_app

Pas 2: Aneu al nou directori:

cd $ my_nav_app

Pas 3: Clona per baixar el projecte des de la meva pàgina de GitHub:

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

Ara, entenem els dissenys de directoris i fitxers del projecte, tal com imprimeix l’ordre:ls -lTR

Disseny del codi font - Git Bisect - Edureka

A continuació, vegem el diari d’història del projecte per veure els compromisos que he fet per generar aquest codi.

Per exemple, una simple ordre de registre de git imprimeix l'historial amb detall, però m'agrada formatar-lo i personalitzar-lo. Per tant, deixem-ho defineix un nom d'àlies: 'hist' utilitzant el git alias com es mostra a continuació:

git alias.hist 'log --pretty = format:'% C (groc)% h% Creset% ad | % C (verd)% s% Creset% C (vermell)% d% Creset% C (blau) [% an] '--graph --decorate --date = short'

Ara, vaig a dur a terme aquesta funció de correcció d’errors en una branca separada, de manera que no interfereixi amb el desenvolupament principal de la branca ‘mestra’. Per fer-ho, seguiu el conjunt següent d'ordres:

  • Creeu una branca 'dev': [mestre] $git branch dev
  • Canvieu a la branca 'dev': $git checkout dev
  • Enumereu els registres de l'historial: [dev] $vaja hist[Nota: aquí s’utilitza l’ordre ‘alias’]

A més, he ressaltat l'últim compromís conegut que sé, en què el meu script ha funcionat bé amb els resultats esperats del cas de prova, aquesta instantània de confirmació és etiquetat com a v1.0.

què fa system.exit (0) a Java

Per tant, ara que coneixem el nostre darrer compromís, anem endavant en aquest article sobre 'git bisect' i provem l'aplicació.

Proveu l'aplicació

Executeu l'script com a - $./scripts/myApplication.sh[prova per primera vegada]



És evident que el meu estat actual del projecte és a error , i no estic segur de quin canvi vaig fer en el compromís que va introduir aquest canvi. Per tant, a continuació, en aquest article sobre git bisect, vegem com es pot identificar el mal compromís.

Identificació del mal compromís

Per començar a inspeccionar la comissió errònia, seguiu els passos següents:

  • Inicieu l'ordre bisect :git bisect start
  • Esmenta l’identificador de compromís incorrecte: git bisecta mal capo bégit bisect c5b3ca8
  • Esmenta l’últim identificador conegut de bona confirmació: git bisecta bé v1.0o bégit bisect 93859d8

D’aquesta manera es divideix l’interval de l’historial de confirmacions aproximadament a mig camí entre les confirmacions bones i les negatives que ens porta a la identificació de confirmació: f61a7e8

Per tant, l'ordre ha comprovat la versió del projecte tal com estava en aquest identificador de confirmació. Ara, anem a provar la nostra aplicació de nou.

Ordre per executar l'aplicació : $./scripts/myApplication.sh[prova segona vegada]


Des de l'aplicació passat en aquest commit, aquest commit no és certament el mal compromís. Per tant, a continuació, haureu d'informar el mateix a l'ordre bisect que - $git bisecta bé

què significa append a java


Ara, això restringirà encara més el resultat de la cerca a la primera meitat de l'interval, tal com es mostra -


Torneu a provar l'aplicació: ordre: $./scripts/myApplication.sh[prova per tercera vegada]


Per tant, com que veiem un error com l’anterior, es tracta d’un error de comissió.

Feu saber l'ordre bisect, executeu $git bisecta malament


Això restringeix encara més la cerca i us portarà a la darrera revisió blanca encerclada: a6ac769

Per tant, provo la meva aplicació per última vegada amb la mateixa ordre: $./scripts/myApplication.sh[prova quarta vegada]

Ara, com que l'aplicació ha fallat de nou, continua sent un error de confirmació. Per tant, executem l'ordre següent:

Executeu l'ordre: git bisecta malament

S'ha trobat un error de lliurament

D’aquesta manera es conclou l’única última confirmació que queda malament.


Així que ja sabeu que aquí és on es va trencar el codi. Què després?

Comprendre quin fitxer tenia l’error

En aquest cas, la sortida us proporciona una informació mínima sobre el fitxer ID de compromís , nom de l'autor , i la data de creació juntament amb el missatge de confirmació i la Camí que es va modificar.

Si voleu depurar-ne més, cal que ho feu llegir el objecte d'identificació de confirmació .

Comandament: git show a6ac76994b3f6c7519204f910fc787b7928cf8ef

Això llegirà l'objecte de confirmació i imprimirà el missatge de registre i les diferències textuals.

Podeu fer servir l'ordre 'git blame' per analitzar com i en quin compromís es va canviar cada línia per quin autor, executeu l'ordre com:git blame code / develop_nav.sh

Atureu la cerca

Per aturar la cerca, utilitzeu l'ordre següent:

Comandament: restabliment de bisect git


Així, el procés de bisecció s’atura i torneu a la branca des de la qual heu iniciat la cerca. Ara, el següent pas és corregir o depurar el codi.

Com es pot corregir / depurar el codi?

Bé, hi ha un parell de solucions que podeu fer per corregir l'estat actual del projecte ara que heu identificat el commit que va provocar l'error en primer lloc.
Tanmateix, si esteu modificant un commit en un fitxer repositori compartit és millor fer-ho revertir el canvi mitjançant git revertir ' comandament.

Tasca: Reverteix els canvis fets per la mala publicació esmentada

Comandament: git revert a6ac769

Com a resultat, revertir els canvis realitzats per aquest compromís va fer dues coses:

  • Ha esborrat les darreres 3 línies afegides (indicades en verd) i ha afegit la línia eliminada (indicades en vermell) de nou. (revers de a6ac769)
  • S'ha creat una confirmació addicional amb la informació del missatge de reversió

'L'ordre Revert també facilita el seguiment del canvi que heu recuperat de la confirmació original'

Utilitzar el 'espectacle' torneu a ordenar per llegir l'identificador de l'objecte, com ara

Comandament: git show 801f029

Ara, continueu i proveu l'aplicació. S’executarà correctament.

Comandament: $./scripts/myApplication.sh

En canvi, si voleu suprimir de la història el compromís incorrecte:

  • Podeu utilitzar el restabliment de git 'Ordre amb el '--dur”(Encara que no es recomana en un dipòsit compartit).

  • Feu una ullada a una versió anterior d’un sol fitxer amb el botó ‘git checkout'Ordre amb el'-‘Opció.

Cal tenir en compte que això només farà canvis al vostre dipòsit local fins que no introduïu els canvis a un dipòsit remot. Atès que alguns canvis creen un nou identificador d'objecte de confirmació, com en el nostre cas anterior, en aquests casos es rebutja un impuls normal al dipòsit remot, ja que l'historial hauria divergit. Heu d’utilitzar el git push 'Ordre amb el'--força‘Opció.

Actualitzeu la branca 'mestra'

Tot i que vaig corregir l’error a la meva branca ‘dev’, ara puc combinar aquest canvi amb la branca ‘master’ també-

  • canvia a 'mestre', ordena:git checkout master
  • extreu les actualitzacions recents de 'origen / mestre' a 'mestre', ordeneu:git pull origen
  • fusionar els canvis 'dev', ordre:git merge gegant

Tanmateix, la vostra combinació pot generar conflictes si hi ha més confirmacions des del dipòsit remot. Resoleu conflictes i continueu amb la combinació.
Finalment, premeu només que la branca estable 'mestra' es comprometi amb el dipòsit remot mentre realitzeu el vostre treball brut (error, funcions, millores) només a les branques de funcions com ara 'dev' en aquest exemple.
A més, el millor és adoptar una lògica estratègia de ramificació per racionalitzar i assegurar el procés de flux de treball de git.

Per resumir, 'git bisect' és una ordre útil i útil que ràpidament identificar el ID de compromís això introduït a culpa al vostre codi en execució amb l'ajut d'un extens cerca binària per lògicament dividint els registres de confirmació a mig camí entre i dolent compromís abast . Per acabar, ho heu après detectar el compromís defectuós i revertir el canvi realitzat per aquesta.

A més, als subordres 'bo' i 'dolent' també podeu utilitzar termes com nou i antic per descriure l'estat de la revisió. Podeu executar l'ordre diverses vegades passant diferents subcomandos i identificadors de revisió / confirmació per identificar diferents identificadors de validació (she-1). Com a alternativa, també es pot executar un script de prova automatitzat per crear el codi trencat mitjançant aquesta ordre. A més, trobareu una descripció detallada d’aquesta ordre executantgit bisect --helpal terminal. Per tant, la gent amb això arribem al final d’aquest article sobre Git Bisect.

aws llança la instància des de la instantània

La intenció de DevOps és crear programari de millor qualitat més ràpidament i amb més fiabilitat, alhora que convida a una major comunicació i col·laboració entre equips. Si esteu fascinat per aquest article, c fes un cop d'ull al per Edureka, una empresa d'aprenentatge en línia de confiança amb una xarxa de més de 250.000 estudiants satisfets repartits per tot el món. El curs de formació en certificació Edureka DevOps ajuda els estudiants a entendre què és DevOps i obtenir experiència en diversos processos i eines DevOps com Puppet, Jenkins, Nagios, Ansible, Xef, Saltstack i GIT per automatitzar diversos passos en SDLC.

Tens alguna pregunta? Si us plau, mencioneu-lo a la secció de comentaris de l'article 'Git Bisect' i us respondrem el més aviat possible.