Git
Bisecting / Finding défectueux commits
Recherche…
Syntaxe
git bisect <subcommand> <options>
git bisect start <bad> [<good>...]
git bisect reset
git bisect good
git bisect bad
Recherche binaire (git bisect)
git bisect
vous permet de trouver quel commit a introduit un bogue en utilisant une recherche binaire.
Commencez par diviser une session en fournissant deux références de validation: une bonne validation avant le bogue et une mauvaise validation après le bogue. Généralement, le mauvais engagement est 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
lance une recherche binaire: il divise la révision en deux et place le référentiel dans la révision intermédiaire. Inspectez le code pour déterminer si la révision est bonne ou mauvaise:
# 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
continuera à exécuter la recherche binaire sur chaque sous-ensemble de mauvaises révisions en fonction de vos instructions. git
présentera une seule révision qui, à moins que vos indicateurs ne soient pas corrects, représentera exactement la révision où le bogue a été introduit.
Ensuite, souvenez-vous de lancer git bisect reset
pour terminer la session bisect et retourner à HEAD.
$ git bisect reset
Si vous avez un script qui peut vérifier le bogue, vous pouvez automatiser le processus avec:
$ git bisect run [script] [arguments]
Où [script]
est le chemin d'accès à votre script et [arguments]
est tout argument devant être transmis à votre script.
En exécutant cette commande, vous exécuterez automatiquement la recherche binaire, en exécutant git bisect good
ou git bisect bad
à chaque étape en fonction du code de sortie de votre script. Avec 0 indique la sortie good
, en sortant avec 1-124, 126 ou 127 indique mauvais. 125 indique que le script ne peut pas tester cette révision (ce qui déclenchera un git bisect skip
).
Trouver automatiquement un commit défectueux
Imaginez que vous êtes sur le master
branche et quelque chose ne fonctionne pas comme prévu (une régression a été introduite), mais vous ne savez pas où. Tout ce que vous savez, c'est que cela fonctionnait dans la dernière version (qui était par exemple balisé ou que vous connaissiez le hachage de validation, prenons ici le old-rel
).
Git a de l'aide pour vous, en trouvant le commit défectueux qui a introduit la régression avec un très petit nombre d'étapes (recherche binaire).
Commencez par diviser:
git bisect start master old-rel
Cela indiquera à git que master
est une révision cassée (ou la première version cassée) et old-rel
est la dernière version connue.
Git va maintenant vérifier une tête détachée au milieu des deux commits. Maintenant, vous pouvez faire vos tests. Selon que cela fonctionne ou non
git bisect good
ou
git bisect bad
. Si cette validation ne peut pas être testée, vous pouvez facilement git reset
et tester celle-ci, git willl s'en chargera.
Après quelques étapes, git affichera le hachage de validation défectueux.
Afin d'abandonner le processus bisect juste émettre
git bisect reset
et git restaurera l'état précédent.