Zoeken…


Syntaxis

  • git bisect <subcommand> <options>

  • git bisect start <bad> [<good>...]

  • git bisect reset

  • git bisect good

  • git bisect bad

Binair zoeken (git bisect)

git bisect kun je achterhalen welke commit een bug heeft geïntroduceerd met behulp van een binaire zoekopdracht.

Begin met het splitsen van een sessie door twee commit-referenties op te geven: een goede commit voor de bug en een slechte commit na de bug. Over het algemeen is de slechte commit HEAD .

# start the git bisect session
$ git bisect start

# give a commit where the bug doesn't exist
$ git bisect good 49c747d

# give a commit where the bug exist
$ git bisect bad HEAD

git start een binaire zoekopdracht: het splitst de revisie in twee en schakelt de repository naar de tussentijdse revisie. Inspecteer de code om te bepalen of de revisie goed of slecht is:

# tell git the revision is good,
# which means it doesn't contain the bug
$ git bisect good

# if the revision contains the bug,
# then tell git it's bad
$ git bisect bad

git blijft de binaire zoekopdracht uitvoeren op elke resterende subset van slechte revisies, afhankelijk van je instructies. git zal een enkele revisie presenteren die, tenzij je vlaggen incorrect waren, exact de revisie zal vertegenwoordigen waar de bug werd geïntroduceerd.

Vergeet daarna niet om git bisect reset om de bisect-sessie te beëindigen en terug te keren naar HEAD.

$ git bisect reset

Als u een script hebt dat kan controleren op de bug, kunt u het proces automatiseren met:

$ git bisect run [script] [arguments]

Waar [script] het pad naar uw script is en [arguments] alle argumenten die aan uw script moeten worden doorgegeven.

Het uitvoeren van deze opdracht zal automatisch de binaire zoekopdracht doorlopen, waarbij git bisect good of git bisect bad bij elke stap wordt uitgevoerd, afhankelijk van de exitcode van je script. Verlaten met 0 betekent good , terwijl afsluiten met 1-124, 126 of 127 slecht aangeeft. 125 geeft aan dat het script die revisie niet kan testen (waardoor een git bisect skip wordt geactiveerd).

Zoek semi-automatisch een defecte commit

Stel je voor dat je op de master branch zit en iets niet werkt zoals verwacht (een regressie werd geïntroduceerd), maar je weet niet waar. Alles wat je weet is, dat het werkte in de laatste release (die bijvoorbeeld getagd was of je kent de commit hash, laten we old-rel hier nemen).

Git heeft hulp voor je, het vinden van de defecte commit die de regressie heeft geïntroduceerd met een zeer laag aantal stappen (binair zoeken).

Begin eerst met het in tweeën delen:

git bisect start master old-rel

Dit zal git vertellen dat master een kapotte revisie is (of de eerste kapotte versie) en old-rel is de laatst bekende versie.

Git zal nu een losgemaakt hoofd bekijken in het midden van beide commits. Nu kunt u uw testen doen. Afhankelijk van of het werkt of niet

git bisect good

of

git bisect bad

. In het geval dat deze commit niet getest kan worden, kun je gemakkelijk git reset en die testen, git zal hiervoor zorgen.

Na een paar stappen zal git de defecte commit hash uitvoeren.

Om het bisect-proces af te breken, geeft u het gewoon op

git bisect reset

en git zal de vorige status herstellen.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow