Git bisect : la recherche dichotomique des bugs
Vous voulez trouver rapidement le commit qui a introduit un bug dans votre base de code mais vous avez plusieurs centaines, voire milliers de commits ? Git bisect utilise la recherche dichotomique pour trouver le coupable efficacement. Chez Eve Media, nous utilisons git bisect pour le debugging.
Le principe
Vous indiquez un commit où le bug existe (bad) et un commit où il n’existe pas (good). Git bisect teste le commit au milieu. Vous indiquez si le bug est présent ou non. Git bisect répète en divisant l’intervalle par deux. En log2(n) tests, vous trouvez le commit fautif.
Démarrer une session bisect
git bisect start lance la session. git bisect bad marque le commit actuel comme bugué. git bisect good abc123 marque le commit abc123 comme sain. Git checkout automatiquement un commit intermédiaire.
Tester et avancer
Testez si le bug est présent. git bisect bad si oui. git bisect good si non. Git checkout le prochain commit à tester. Répétez jusqu’à trouver le premier commit bad. Git affiche le commit coupable.
Terminer la session
git bisect reset termine la session et vous ramène où vous étiez. Vous avez maintenant le commit exact qui a introduit le bug. Examinez-le pour comprendre et corriger.
Automatiser avec un script
Si vous avez un test qui détecte le bug : git bisect run ./test.sh. Le script doit retourner 0 si good, non-0 si bad. Git bisect exécute le script automatiquement jusqu’à trouver le commit.
Exemple concret
Le bug existe en HEAD. Le dernier release connu sans bug est v1.2.0. git bisect start, git bisect bad HEAD, git bisect good v1.2.0. Avec 1000 commits entre les deux, environ 10 tests suffisent pour trouver le coupable.
Skip des commits
Si un commit intermédiaire ne compile pas ou est non testable : git bisect skip. Git essaie un commit voisin. Attention : trop de skips peuvent fausser le résultat.
Visualiser la session
git bisect log montre l’historique de la session. git bisect visualize ouvre gitk avec les commits restants à tester. Utile pour comprendre où vous en êtes.
Bonnes pratiques
Des commits atomiques facilitent l’identification du changement fautif. Des tests automatisés permettent d’utiliser bisect run. Un historique propre (pas de commits « WIP ») aide au debugging.
Limitations
Si le bug a été introduit puis partiellement corrigé, bisect peut donner des résultats confus. Si vous ne pouvez pas tester certains commits (ne compilent pas), le résultat peut être imprécis.
Conclusion
Git bisect est un outil puissant et sous-utilisé. Pour des bugs de régression, c’est souvent le moyen le plus efficace de trouver la cause. Quelques minutes de bisect peuvent éviter des heures de debugging manuel.
Chez Eve Media, nous utilisons les bons outils pour des projets de qualité. Contactez-nous pour vos développements.



