Quand un bug apparaît et que vous ne savez pas depuis quand il est là,
Git dispose d'outils qui localisent le problème en quelques minutes.
git bisect fait une recherche dichotomique dans l'historique : vous lui
donnez un commit "bon" et un commit "mauvais", il trouve le commit coupable
en $O(\log n)$ opérations.
Ces deux guides couvrent l'investigation d'un dépôt sous deux angles : celui du débogage de régression (bisect, blame) et celui de la recherche de code (grep, log -S, log -L).
Quel outil pour quel besoin ?
Section intitulée « Quel outil pour quel besoin ? »| Besoin | Outil | Guide |
|---|---|---|
| Trouver le commit qui a introduit un bug | git bisect | Debug : bisect et blame |
| Savoir qui a écrit une ligne de code | git blame | Debug : bisect et blame |
| Automatiser la détection du commit fautif | git bisect run <script> | Debug : bisect et blame |
| Chercher une chaîne dans les fichiers actuels | git grep | Rechercher dans Git |
| Trouver quand une chaîne est apparue / a disparu | git log -S (pickaxe) | Rechercher dans Git |
| Suivre l'historique d'une fonction | git log -L :func:file | Rechercher dans Git |
Les deux guides du module
Section intitulée « Les deux guides du module »Rechercher dans Git retrouve du code dans les
fichiers ou dans l'historique avec précision : git grep, git log -S
(pickaxe) et git log -L. Debug : bisect et blame
localise le commit coupable et l'auteur d'une modification avec git bisect,
manuel ou automatisé, et git blame -L. Commencez par la recherche si vous
savez quoi chercher, par le débogage si vous ne connaissez que le symptôme.
À retenir
Section intitulée « À retenir »git bisect start→git bisect bad→git bisect good <sha>: Git checkout automatiquement les commits à testergit bisect run ./test.shautomatise le processus, le script doit retourner 0 (bon) ou non-zéro (mauvais)git blame -L 10,20 fichier.pyaffiche l'auteur et le commit de chaque ligne sur la plage 10-20git blame -Cdétecte les lignes copiées depuis d'autres fichiers, évite les faux positifsgit log -S "motclé"(pickaxe) trouve les commits qui ont ajouté ou supprimé cette chaîne, pas les commits qui l'ont juste déplacée