CINXE.COM
Git - Déboguer avec Git
<!DOCTYPE html> <html lang="fr"> <head> <meta charset='utf-8'> <meta content='IE=edge,chrome=1' http-equiv='X-UA-Compatible'> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Git - Déboguer avec Git</title> <link href="/favicon.ico" rel='shortcut icon' type='image/x-icon'> <link rel="stylesheet" href="/application.min.css"> <script src="/js/modernizr.js"></script> <script src="/js/modernize.js"></script> </head> <body id="documentation"> <div class="inner"> <header> <a href="/"><img src="/images/logo@2x.png" width="110" height="46" alt="Git" /></a> <span id="tagline"></span> <script type="text/javascript"> const taglines = [ "fast-version-control", "everything-is-local", "distributed-even-if-your-workflow-isnt", "local-branching-on-the-cheap", "distributed-is-the-new-centralized" ]; var tagline = taglines[Math.floor(Math.random() * taglines.length)]; document.getElementById('tagline').innerHTML = '--' + tagline; </script> <form id="search" action="/search/results"> <input id="search-text" name="search" placeholder="Type / to search entire site…" autocomplete="off" type="text" /> </form> <div id="search-results"></div> </header> </div> <div class="inner"> <div id="content-wrapper"> <div tabindex="1" class="sidebar-btn"></div> <aside class="sidebar" id="sidebar"> <nav> <ul> <li> <a href="/about">About</a> <ul> </ul> </li> <li> <a href="/doc" class="active">Documentation</a> <ul class="expanded"> <li> <a href="/docs">Reference</a> </li> <li> <a href="/book" class="active">Book</a> </li> <li> <a href="/videos">Videos</a> </li> <li> <a href="/doc/ext">External Links</a> </li> </ul> </li> <li> <a href="/downloads">Downloads</a> <ul > <li> <a href="/downloads/guis">GUI Clients</a> </li> <li> <a href="/downloads/logos">Logos</a> </li> </ul> </li> <li> <a href="/community">Community</a> </li> </ul> <hr class="sidebar"> <p> This book is available in <a href="/book/en/v2/Git-Tools-Debugging-with-Git">English</a>. </p> <p> Full translation available in <table> <tr><td><a href="/book/az/v2/Git-Al%c9%99tl%c9%99ri-Git-il%c9%99-Debugging">azərbaycan dili</a>,</td></tr> <tr><td><a href="/book/bg">български език</a>,</td></tr> <tr><td><a href="/book/de/v2/Git-Tools-Debuggen-mit-Git">Deutsch</a>,</td></tr> <tr><td><a href="/book/es/v2/Herramientas-de-Git-Haciendo-debug-con-Git">Español</a>,</td></tr> <tr><td><a href="/book/fr/v2/Utilitaires-Git-D%c3%a9boguer-avec-Git">Français</a>,</td></tr> <tr><td><a href="/book/gr">Ελληνικά</a>,</td></tr> <tr><td><a href="/book/ja/v2/Git-%e3%81%ae%e3%81%95%e3%81%be%e3%81%96%e3%81%be%e3%81%aa%e3%83%84%e3%83%bc%e3%83%ab-Git-%e3%81%ab%e3%82%88%e3%82%8b%e3%83%87%e3%83%90%e3%83%83%e3%82%b0">日本語</a>,</td></tr> <tr><td><a href="/book/ko/v2/Git-%eb%8f%84%ea%b5%ac-Git%ec%9c%bc%eb%a1%9c-%eb%b2%84%ea%b7%b8-%ec%b0%be%ea%b8%b0">한국어</a>,</td></tr> <tr><td><a href="/book/nl/v2/Git-Tools-Debuggen-met-Git">Nederlands</a>,</td></tr> <tr><td><a href="/book/ru/v2/%d0%98%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d1%8b-Git-%d0%9e%d0%b1%d0%bd%d0%b0%d1%80%d1%83%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-%d0%be%d1%88%d0%b8%d0%b1%d0%be%d0%ba-%d1%81-%d0%bf%d0%be%d0%bc%d0%be%d1%89%d1%8c%d1%8e-Git">Русский</a>,</td></tr> <tr><td><a href="/book/sl/v2/Orodja-Git-Razhro%c5%a1%c4%8devanje-z-Gitom">Slovenščina</a>,</td></tr> <tr><td><a href="/book/tl/v2/Mga-Git-na-Kasangkapan-Pagdebug-gamit-ang-Git">Tagalog</a>,</td></tr> <tr><td><a href="/book/uk/v2/%d0%86%d0%bd%d1%81%d1%82%d1%80%d1%83%d0%bc%d0%b5%d0%bd%d1%82%d0%b8-Git-%d0%97%d0%bd%d0%b5%d0%b2%d0%b0%d0%b4%d0%b6%d0%b5%d0%bd%d0%bd%d1%8f-%d0%b7-Git">Українська</a></td></tr> <tr><td><a href="/book/zh/v2/Git-%e5%b7%a5%e5%85%b7-%e4%bd%bf%e7%94%a8-Git-%e8%b0%83%e8%af%95">简体中文</a>,</td></tr> </table> </p> <p> Partial translations available in <table> <tr><td><a href="/book/cs/v2/Git-Tools-Lad%c4%9bn%c3%ad-v-syst%c3%a9mu-Git">Čeština</a>,</td></tr> <tr><td><a href="/book/mk/v2/Git-%d0%90%d0%bb%d0%b0%d1%82%d0%ba%d0%b8-%d0%94%d0%b5%d0%b1%d0%b0%d0%b3%d0%b8%d1%80%d0%b0%d1%9a%d0%b5-%d1%81%d0%be-Git">Македонски</a>,</td></tr> <tr><td><a href="/book/pl/v2/Narz%c4%99dzia-Gita-Debugowanie-z-Gitem">Polski</a>,</td></tr> <tr><td><a href="/book/sr/v2/%d0%93%d0%b8%d1%82-%d0%b0%d0%bb%d0%b0%d1%82%d0%b8-%d0%9e%d1%82%d0%ba%d0%bb%d0%b0%d1%9a%d0%b0%d1%9a%d0%b5-%d0%b3%d1%80%d0%b5%d1%88%d0%b0%d0%ba%d0%b0-%d1%81%d0%b0-%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%be%d0%bc-Git">Српски</a>,</td></tr> <tr><td><a href="/book/uz/v2/Git-Tools-Debugging-with-Git">Ўзбекча</a>,</td></tr> <tr><td><a href="/book/zh-tw/v2/Git-%e5%b7%a5%e5%85%b7-Debugging-with-Git">繁體中文</a>,</td></tr> </table> </p> <p> Translations started for <table> <tr><td><a href="/book/be/v2/Git-Tools-Debugging-with-Git">Беларуская</a>,</td></tr> <tr><td><a href="/book/fa/v2/Git-Tools-Debugging-with-Git" dir="rtl">فارسی</a>,</td></tr> <tr><td><a href="/book/id/v2/Git-Tools-Debugging-with-Git">Indonesian</a>,</td></tr> <tr><td><a href="/book/it/v2/Git-Tools-Debugging-with-Git">Italiano</a>,</td></tr> <tr><td><a href="/book/ms/v2/Git-Tools-Debugging-with-Git">Bahasa Melayu</a>,</td></tr> <tr><td><a href="/book/pt-br/v2/Git-Tools-Debugging-with-Git">Português (Brasil)</a>,</td></tr> <tr><td><a href="/book/pt-pt/v2/Ferramentas-do-Git-Debugging-with-Git">Português (Portugal)</a>,</td></tr> <tr><td><a href="/book/sv/v2/Git-Tools-Debugging-with-Git">Svenska</a>,</td></tr> <tr><td><a href="/book/tr/v2/Git-Ara%c3%a7lar%c4%b1-Git%e2%80%99le-Hata-Ay%c4%b1klama">Türkçe</a>.</td></tr> </table> </p> <hr class="sidebar"/> <p> The source of this book is <a href="https://github.com/progit/progit2-fr">hosted on GitHub.</a></br> Patches, suggestions and comments are welcome. </p> </nav> </aside> <div id="content"> <div id="book-chapters"> <a class="dropdown-trigger" id="book-chapters-trigger" data-panel-id="chapters-dropdown" href="#">Chapters ▾</a> <div class='dropdown-panel' id='chapters-dropdown'> <div class='three-column'> <div class="column-left"> <ol class='book-toc'> <li class='chapter'> <h2>1. <a href="/book/fr/v2/D%c3%a9marrage-rapide-%c3%80-propos-de-la-gestion-de-version">Démarrage rapide</a></h2> <ol> <li> 1.1 <a href="/book/fr/v2/D%c3%a9marrage-rapide-%c3%80-propos-de-la-gestion-de-version">À propos de la gestion de version</a> </li> <li> 1.2 <a href="/book/fr/v2/D%c3%a9marrage-rapide-Une-rapide-histoire-de-Git">Une rapide histoire de Git</a> </li> <li> 1.3 <a href="/book/fr/v2/D%c3%a9marrage-rapide-Rudiments-de-Git">Rudiments de Git</a> </li> <li> 1.4 <a href="/book/fr/v2/D%c3%a9marrage-rapide-La-ligne-de-commande">La ligne de commande</a> </li> <li> 1.5 <a href="/book/fr/v2/D%c3%a9marrage-rapide-Installation-de-Git">Installation de Git</a> </li> <li> 1.6 <a href="/book/fr/v2/D%c3%a9marrage-rapide-Param%c3%a9trage-%c3%a0-la-premi%c3%a8re-utilisation-de-Git">Paramétrage à la première utilisation de Git</a> </li> <li> 1.7 <a href="/book/fr/v2/D%c3%a9marrage-rapide-Obtenir-de-l%e2%80%99aide">Obtenir de l’aide</a> </li> <li> 1.8 <a href="/book/fr/v2/D%c3%a9marrage-rapide-R%c3%a9sum%c3%a9">Résumé</a> </li> </ol> </li> <li class='chapter'> <h2>2. <a href="/book/fr/v2/Les-bases-de-Git-D%c3%a9marrer-un-d%c3%a9p%c3%b4t-Git">Les bases de Git</a></h2> <ol> <li> 2.1 <a href="/book/fr/v2/Les-bases-de-Git-D%c3%a9marrer-un-d%c3%a9p%c3%b4t-Git">Démarrer un dépôt Git</a> </li> <li> 2.2 <a href="/book/fr/v2/Les-bases-de-Git-Enregistrer-des-modifications-dans-le-d%c3%a9p%c3%b4t">Enregistrer des modifications dans le dépôt</a> </li> <li> 2.3 <a href="/book/fr/v2/Les-bases-de-Git-Visualiser-l%e2%80%99historique-des-validations">Visualiser l’historique des validations</a> </li> <li> 2.4 <a href="/book/fr/v2/Les-bases-de-Git-Annuler-des-actions">Annuler des actions</a> </li> <li> 2.5 <a href="/book/fr/v2/Les-bases-de-Git-Travailler-avec-des-d%c3%a9p%c3%b4ts-distants">Travailler avec des dépôts distants</a> </li> <li> 2.6 <a href="/book/fr/v2/Les-bases-de-Git-%c3%89tiquetage">Étiquetage</a> </li> <li> 2.7 <a href="/book/fr/v2/Les-bases-de-Git-Les-alias-Git">Les alias Git</a> </li> <li> 2.8 <a href="/book/fr/v2/Les-bases-de-Git-R%c3%a9sum%c3%a9">Résumé</a> </li> </ol> </li> <li class='chapter'> <h2>3. <a href="/book/fr/v2/Les-branches-avec-Git-Les-branches-en-bref">Les branches avec Git</a></h2> <ol> <li> 3.1 <a href="/book/fr/v2/Les-branches-avec-Git-Les-branches-en-bref">Les branches en bref</a> </li> <li> 3.2 <a href="/book/fr/v2/Les-branches-avec-Git-Branches-et-fusions%c2%a0:-les-bases">Branches et fusions : les bases</a> </li> <li> 3.3 <a href="/book/fr/v2/Les-branches-avec-Git-Gestion-des-branches">Gestion des branches</a> </li> <li> 3.4 <a href="/book/fr/v2/Les-branches-avec-Git-Travailler-avec-les-branches">Travailler avec les branches</a> </li> <li> 3.5 <a href="/book/fr/v2/Les-branches-avec-Git-Branches-de-suivi-%c3%a0-distance">Branches de suivi à distance</a> </li> <li> 3.6 <a href="/book/fr/v2/Les-branches-avec-Git-Rebaser-Rebasing">Rebaser (Rebasing)</a> </li> <li> 3.7 <a href="/book/fr/v2/Les-branches-avec-Git-R%c3%a9sum%c3%a9">Résumé</a> </li> </ol> </li> <li class='chapter'> <h2>4. <a href="/book/fr/v2/Git-sur-le-serveur-Protocoles">Git sur le serveur</a></h2> <ol> <li> 4.1 <a href="/book/fr/v2/Git-sur-le-serveur-Protocoles">Protocoles</a> </li> <li> 4.2 <a href="/book/fr/v2/Git-sur-le-serveur-Installation-de-Git-sur-un-serveur">Installation de Git sur un serveur</a> </li> <li> 4.3 <a href="/book/fr/v2/Git-sur-le-serveur-G%c3%a9n%c3%a9ration-des-cl%c3%a9s-publiques-SSH">Génération des clés publiques SSH</a> </li> <li> 4.4 <a href="/book/fr/v2/Git-sur-le-serveur-Mise-en-place-du-serveur">Mise en place du serveur</a> </li> <li> 4.5 <a href="/book/fr/v2/Git-sur-le-serveur-D%c3%a9mon-Daemon-Git">Démon (Daemon) Git</a> </li> <li> 4.6 <a href="/book/fr/v2/Git-sur-le-serveur-HTTP-intelligent">HTTP intelligent</a> </li> <li> 4.7 <a href="/book/fr/v2/Git-sur-le-serveur-GitWeb">GitWeb</a> </li> <li> 4.8 <a href="/book/fr/v2/Git-sur-le-serveur-GitLab">GitLab</a> </li> <li> 4.9 <a href="/book/fr/v2/Git-sur-le-serveur-Git-h%c3%a9berg%c3%a9">Git hébergé</a> </li> <li> 4.10 <a href="/book/fr/v2/Git-sur-le-serveur-R%c3%a9sum%c3%a9">Résumé</a> </li> </ol> </li> <li class='chapter'> <h2>5. <a href="/book/fr/v2/Git-distribu%c3%a9-D%c3%a9veloppements-distribu%c3%a9s">Git distribué</a></h2> <ol> <li> 5.1 <a href="/book/fr/v2/Git-distribu%c3%a9-D%c3%a9veloppements-distribu%c3%a9s">Développements distribués</a> </li> <li> 5.2 <a href="/book/fr/v2/Git-distribu%c3%a9-Contribution-%c3%a0-un-projet">Contribution à un projet</a> </li> <li> 5.3 <a href="/book/fr/v2/Git-distribu%c3%a9-Maintenance-d%e2%80%99un-projet">Maintenance d’un projet</a> </li> <li> 5.4 <a href="/book/fr/v2/Git-distribu%c3%a9-R%c3%a9sum%c3%a9">Résumé</a> </li> </ol> </li> </ol> </div> <div class='column-middle'> <ol class='book-toc'> <li class='chapter'> <h2>6. <a href="/book/fr/v2/GitHub-Configuration-et-param%c3%a9trage-d%e2%80%99un-compte">GitHub</a></h2> <ol> <li> 6.1 <a href="/book/fr/v2/GitHub-Configuration-et-param%c3%a9trage-d%e2%80%99un-compte">Configuration et paramétrage d’un compte</a> </li> <li> 6.2 <a href="/book/fr/v2/GitHub-Contribution-%c3%a0-un-projet">Contribution à un projet</a> </li> <li> 6.3 <a href="/book/fr/v2/GitHub-Maintenance-d%e2%80%99un-projet">Maintenance d’un projet</a> </li> <li> 6.4 <a href="/book/fr/v2/GitHub-Gestion-d%e2%80%99un-regroupement">Gestion d’un regroupement</a> </li> <li> 6.5 <a href="/book/fr/v2/GitHub-%c3%89criture-de-scripts-pour-GitHub">Écriture de scripts pour GitHub</a> </li> <li> 6.6 <a href="/book/fr/v2/GitHub-R%c3%a9sum%c3%a9">Résumé</a> </li> </ol> </li> <li class='chapter'> <h2>7. <a href="/book/fr/v2/Utilitaires-Git-S%c3%a9lection-des-versions">Utilitaires Git</a></h2> <ol> <li> 7.1 <a href="/book/fr/v2/Utilitaires-Git-S%c3%a9lection-des-versions">Sélection des versions</a> </li> <li> 7.2 <a href="/book/fr/v2/Utilitaires-Git-Indexation-interactive">Indexation interactive</a> </li> <li> 7.3 <a href="/book/fr/v2/Utilitaires-Git-Remisage-et-nettoyage">Remisage et nettoyage</a> </li> <li> 7.4 <a href="/book/fr/v2/Utilitaires-Git-Signer-votre-travail">Signer votre travail</a> </li> <li> 7.5 <a href="/book/fr/v2/Utilitaires-Git-Recherche">Recherche</a> </li> <li> 7.6 <a href="/book/fr/v2/Utilitaires-Git-R%c3%a9%c3%a9crire-l%e2%80%99historique">Réécrire l’historique</a> </li> <li> 7.7 <a href="/book/fr/v2/Utilitaires-Git-Reset-d%c3%a9mystifi%c3%a9">Reset démystifié</a> </li> <li> 7.8 <a href="/book/fr/v2/Utilitaires-Git-Fusion-avanc%c3%a9e">Fusion avancée</a> </li> <li> 7.9 <a href="/book/fr/v2/Utilitaires-Git-Rerere">Rerere</a> </li> <li> 7.10 <a href="/book/fr/v2/Utilitaires-Git-D%c3%a9boguer-avec-Git" class="active">Déboguer avec Git</a> </li> <li> 7.11 <a href="/book/fr/v2/Utilitaires-Git-Sous-modules">Sous-modules</a> </li> <li> 7.12 <a href="/book/fr/v2/Utilitaires-Git-Empaquetage-bundling">Empaquetage (bundling)</a> </li> <li> 7.13 <a href="/book/fr/v2/Utilitaires-Git-Replace">Replace</a> </li> <li> 7.14 <a href="/book/fr/v2/Utilitaires-Git-Stockage-des-identifiants">Stockage des identifiants</a> </li> <li> 7.15 <a href="/book/fr/v2/Utilitaires-Git-R%c3%a9sum%c3%a9">Résumé</a> </li> </ol> </li> <li class='chapter'> <h2>8. <a href="/book/fr/v2/Personnalisation-de-Git-Configuration-de-Git">Personnalisation de Git</a></h2> <ol> <li> 8.1 <a href="/book/fr/v2/Personnalisation-de-Git-Configuration-de-Git">Configuration de Git</a> </li> <li> 8.2 <a href="/book/fr/v2/Personnalisation-de-Git-Attributs-Git">Attributs Git</a> </li> <li> 8.3 <a href="/book/fr/v2/Personnalisation-de-Git-Crochets-Git">Crochets Git</a> </li> <li> 8.4 <a href="/book/fr/v2/Personnalisation-de-Git-Exemple-de-politique-g%c3%a9r%c3%a9e-par-Git">Exemple de politique gérée par Git</a> </li> <li> 8.5 <a href="/book/fr/v2/Personnalisation-de-Git-R%c3%a9sum%c3%a9">Résumé</a> </li> </ol> </li> <li class='chapter'> <h2>9. <a href="/book/fr/v2/Git-et-les-autres-syst%c3%a8mes-Git-comme-client">Git et les autres systèmes</a></h2> <ol> <li> 9.1 <a href="/book/fr/v2/Git-et-les-autres-syst%c3%a8mes-Git-comme-client">Git comme client</a> </li> <li> 9.2 <a href="/book/fr/v2/Git-et-les-autres-syst%c3%a8mes-Migration-vers-Git">Migration vers Git</a> </li> <li> 9.3 <a href="/book/fr/v2/Git-et-les-autres-syst%c3%a8mes-R%c3%a9sum%c3%a9">Résumé</a> </li> </ol> </li> <li class='chapter'> <h2>10. <a href="/book/fr/v2/Les-tripes-de-Git-Plomberie-et-porcelaine">Les tripes de Git</a></h2> <ol> <li> 10.1 <a href="/book/fr/v2/Les-tripes-de-Git-Plomberie-et-porcelaine">Plomberie et porcelaine</a> </li> <li> 10.2 <a href="/book/fr/v2/Les-tripes-de-Git-Les-objets-de-Git">Les objets de Git</a> </li> <li> 10.3 <a href="/book/fr/v2/Les-tripes-de-Git-R%c3%a9f%c3%a9rences-Git">Références Git</a> </li> <li> 10.4 <a href="/book/fr/v2/Les-tripes-de-Git-Fichiers-group%c3%a9s">Fichiers groupés</a> </li> <li> 10.5 <a href="/book/fr/v2/Les-tripes-de-Git-La-refspec">La refspec</a> </li> <li> 10.6 <a href="/book/fr/v2/Les-tripes-de-Git-Les-protocoles-de-transfert">Les protocoles de transfert</a> </li> <li> 10.7 <a href="/book/fr/v2/Les-tripes-de-Git-Maintenance-et-r%c3%a9cup%c3%a9ration-de-donn%c3%a9es">Maintenance et récupération de données</a> </li> <li> 10.8 <a href="/book/fr/v2/Les-tripes-de-Git-Les-variables-d%e2%80%99environnement">Les variables d’environnement</a> </li> <li> 10.9 <a href="/book/fr/v2/Les-tripes-de-Git-R%c3%a9sum%c3%a9">Résumé</a> </li> </ol> </li> </ol> </div> <div class='column-right'> <ol class='book-toc'> <li class='chapter'> <h2>A1. <a href="/book/fr/v2/Annexe-A:-Git-dans-d%e2%80%99autres-environnements-Interfaces-graphiques">Annexe A: Git dans d’autres environnements</a></h2> <ol> <li> A1.1 <a href="/book/fr/v2/Annexe-A:-Git-dans-d%e2%80%99autres-environnements-Interfaces-graphiques">Interfaces graphiques</a> </li> <li> A1.2 <a href="/book/fr/v2/Annexe-A:-Git-dans-d%e2%80%99autres-environnements-Git-dans-Visual-Studio">Git dans Visual Studio</a> </li> <li> A1.3 <a href="/book/fr/v2/Annexe-A:-Git-dans-d%e2%80%99autres-environnements-Git-dans-Visual-Studio-Code">Git dans Visual Studio Code</a> </li> <li> A1.4 <a href="/book/fr/v2/Annexe-A:-Git-dans-d%e2%80%99autres-environnements-Git-dans-IntelliJ-/-PyCharm-/-WebStorm-/-PhpStorm-/-RubyMine">Git dans IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine</a> </li> <li> A1.5 <a href="/book/fr/v2/Annexe-A:-Git-dans-d%e2%80%99autres-environnements-Git-dans-Sublime-Text">Git dans Sublime Text</a> </li> <li> A1.6 <a href="/book/fr/v2/Annexe-A:-Git-dans-d%e2%80%99autres-environnements-Git-dans-Bash">Git dans Bash</a> </li> <li> A1.7 <a href="/book/fr/v2/Annexe-A:-Git-dans-d%e2%80%99autres-environnements-Git-dans-Zsh">Git dans Zsh</a> </li> <li> A1.8 <a href="/book/fr/v2/Annexe-A:-Git-dans-d%e2%80%99autres-environnements-Git-dans-PowerShell">Git dans PowerShell</a> </li> <li> A1.9 <a href="/book/fr/v2/Annexe-A:-Git-dans-d%e2%80%99autres-environnements-R%c3%a9sum%c3%a9">Résumé</a> </li> </ol> </li> <li class='chapter'> <h2>A2. <a href="/book/fr/v2/Annexe-B:-Embarquer-Git-dans-vos-applications-Git-en-ligne-de-commande">Annexe B: Embarquer Git dans vos applications</a></h2> <ol> <li> A2.1 <a href="/book/fr/v2/Annexe-B:-Embarquer-Git-dans-vos-applications-Git-en-ligne-de-commande">Git en ligne de commande</a> </li> <li> A2.2 <a href="/book/fr/v2/Annexe-B:-Embarquer-Git-dans-vos-applications-Libgit2">Libgit2</a> </li> <li> A2.3 <a href="/book/fr/v2/Annexe-B:-Embarquer-Git-dans-vos-applications-JGit">JGit</a> </li> <li> A2.4 <a href="/book/fr/v2/Annexe-B:-Embarquer-Git-dans-vos-applications-go-git">go-git</a> </li> <li> A2.5 <a href="/book/fr/v2/Annexe-B:-Embarquer-Git-dans-vos-applications-Dulwich">Dulwich</a> </li> </ol> </li> <li class='chapter'> <h2>A3. <a href="/book/fr/v2/Commandes-Git-Installation-et-configuration">Commandes Git</a></h2> <ol> <li> A3.1 <a href="/book/fr/v2/Commandes-Git-Installation-et-configuration">Installation et configuration</a> </li> <li> A3.2 <a href="/book/fr/v2/Commandes-Git-Obtention-et-cr%c3%a9ation-des-projets">Obtention et création des projets</a> </li> <li> A3.3 <a href="/book/fr/v2/Commandes-Git-Capture-d%e2%80%99instantan%c3%a9-basique">Capture d’instantané basique</a> </li> <li> A3.4 <a href="/book/fr/v2/Commandes-Git-Cr%c3%a9ation-de-branches-et-fusion">Création de branches et fusion</a> </li> <li> A3.5 <a href="/book/fr/v2/Commandes-Git-Partage-et-mise-%c3%a0-jour-de-projets">Partage et mise à jour de projets</a> </li> <li> A3.6 <a href="/book/fr/v2/Commandes-Git-Inspection-et-comparaison">Inspection et comparaison</a> </li> <li> A3.7 <a href="/book/fr/v2/Commandes-Git-D%c3%a9bogage">Débogage</a> </li> <li> A3.8 <a href="/book/fr/v2/Commandes-Git-Patchs">Patchs</a> </li> <li> A3.9 <a href="/book/fr/v2/Commandes-Git-Courriel">Courriel</a> </li> <li> A3.10 <a href="/book/fr/v2/Commandes-Git-Syst%c3%a8mes-externes">Systèmes externes</a> </li> <li> A3.11 <a href="/book/fr/v2/Commandes-Git-Administration">Administration</a> </li> <li> A3.12 <a href="/book/fr/v2/Commandes-Git-Commandes-de-plomberie">Commandes de plomberie</a> </li> </ol> </li> </ol> </div> </div> </div> <span class="light" id="edition"> 2nd Edition </span> </div> <div id="main" data-pagefind-filter="category:book" data-pagefind-meta="category:Book" data-pagefind-weight="0.05" data-pagefind-body class="book edition2"> <h1>7.10 Utilitaires Git - Déboguer avec Git</h1> <div> <h2 id="_déboguer_avec_git">Déboguer avec Git</h2> <div class="paragraph"> <p>Git fournit aussi quelques outils pour vous aider à déboguer votre projet. Puisque Git est conçu pour fonctionner avec pratiquement tout type de projet, ces outils sont plutôt génériques, mais ils peuvent souvent vous aider à traquer un bogue ou au moins cerner où cela tourne mal.</p> </div> <div class="sect3"> <h3 id="s_file_annotation">Fichier annoté</h3> <div class="paragraph"> <p>Si vous traquez un bogue dans votre code et que vous voulez savoir quand il est apparu et pourquoi, annoter les fichiers est souvent le meilleur moyen. Cela vous montre la dernière validation qui a modifié chaque ligne de votre fichier. Donc, si vous voyez une méthode dans votre code qui est boguée, vous pouvez visualiser le fichier annoté avec <code>git blame</code> pour voir quand chaque ligne de la méthode a été modifiée pour la dernière fois et par qui.</p> </div> <div class="paragraph"> <p>L’exemple qui suit utilise <code>git blame</code> pour déterminer quel commit et validateur est responsable des lignes dans le <code>Makefile</code> de plus haut niveau du noyau Linux et, plus tard, utilise l’option <code>-L</code> pour restreindre la sortie de l’annotation des lignes 69 à 82 de ce fichier :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git blame -L 69,82 Makefile b8b0618cf6fab (Cheng Renquan 2009-05-26 16:03:07 +0800 69) ifeq ("$(origin V)", "command line") b8b0618cf6fab (Cheng Renquan 2009-05-26 16:03:07 +0800 70) KBUILD_VERBOSE = $(V) ^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 71) endif ^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 72) ifndef KBUILD_VERBOSE ^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 73) KBUILD_VERBOSE = 0 ^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 74) endif ^1da177e4c3f4 (Linus Torvalds 2005-04-16 15:20:36 -0700 75) 066b7ed955808 (Michal Marek 2014-07-04 14:29:30 +0200 76) ifeq ($(KBUILD_VERBOSE),1) 066b7ed955808 (Michal Marek 2014-07-04 14:29:30 +0200 77) quiet = 066b7ed955808 (Michal Marek 2014-07-04 14:29:30 +0200 78) Q = 066b7ed955808 (Michal Marek 2014-07-04 14:29:30 +0200 79) else 066b7ed955808 (Michal Marek 2014-07-04 14:29:30 +0200 80) quiet=quiet_ 066b7ed955808 (Michal Marek 2014-07-04 14:29:30 +0200 81) Q = @ 066b7ed955808 (Michal Marek 2014-07-04 14:29:30 +0200 82) endif</code></pre> </div> </div> <div class="paragraph"> <p>Remarquez que le premier champ est le SHA-1 partiel du dernier <em>commit</em> à avoir modifié la ligne. Les deux champs suivants sont des valeurs extraites du <em>commit</em> : l’auteur et la date du <em>commit</em>, vous pouvez donc facilement voir qui a modifié la ligne et quand. Ensuite arrive le numéro de ligne et son contenu. Remarquez également les lignes dont le <em>commit</em> est <code>^4832fe2</code>, elles désignent les lignes qui étaient dans la version du fichier lors du premier <em>commit</em> de ce fichier. Ce <em>commit</em> contient le premier ajout de ce fichier, et ces lignes n’ont pas été modifiées depuis. Tout ça est un peu confus, parce que vous connaissez maintenant au moins trois façons différentes que Git interprète <code>^</code> pour modifier l’empreinte SHA, mais au moins, vous savez ce qu’il signifie ici.</p> </div> <div class="paragraph"> <p>Une autre chose sympa sur Git, c’est qu’il ne suit pas explicitement les renommages de fichier. Il enregistre les contenus puis essaye de deviner ce qui a été renommé implicitement, après coup. Ce qui nous permet d’utiliser cette fonctionnalité intéressante pour suivre toutes sortes de mouvements de code. Si vous passez <code>-C</code> à <code>git blame</code>, Git analyse le fichier que vous voulez annoter et essaye de deviner d’où les bouts de code proviennent par copie ou déplacement. Récemment, j’ai remanié un fichier nommé <code>GITServerHandler.m</code> en le divisant en plusieurs fichiers, dont le fichier <code>GITPackUpload.m</code>. En annotant <code>GITPackUpload.m</code> avec l’option <code>-C</code>, je peux voir quelles sections de code en sont originaires :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git blame -C -L 141,153 GITPackUpload.m f344f58d GITServerHandler.m (Scott 2009-01-04 141) f344f58d GITServerHandler.m (Scott 2009-01-04 142) - (void) gatherObjectShasFromC f344f58d GITServerHandler.m (Scott 2009-01-04 143) { 70befddd GITServerHandler.m (Scott 2009-03-22 144) //NSLog(@"GATHER COMMI ad11ac80 GITPackUpload.m (Scott 2009-03-24 145) ad11ac80 GITPackUpload.m (Scott 2009-03-24 146) NSString *parentSha; ad11ac80 GITPackUpload.m (Scott 2009-03-24 147) GITCommit *commit = [g ad11ac80 GITPackUpload.m (Scott 2009-03-24 148) ad11ac80 GITPackUpload.m (Scott 2009-03-24 149) //NSLog(@"GATHER COMMI ad11ac80 GITPackUpload.m (Scott 2009-03-24 150) 56ef2caf GITServerHandler.m (Scott 2009-01-05 151) if(commit) { 56ef2caf GITServerHandler.m (Scott 2009-01-05 152) [refDict setOb 56ef2caf GITServerHandler.m (Scott 2009-01-05 153)</code></pre> </div> </div> <div class="paragraph"> <p>C’est vraiment utile, non ? Normalement, vous obtenez comme <em>commit</em> originel celui dont votre code a été copié, puisque ce fut la première fois que vous avez touché à ces lignes dans ce fichier. Git vous montre le <em>commit</em> d’origine, celui où vous avez écrit ces lignes, même si c’était dans un autre fichier.</p> </div> </div> <div class="sect3"> <h3 id="s_binary_search">Recherche dichotomique</h3> <div class="paragraph"> <p>Annoter un fichier peut aider si vous savez déjà où le problème se situe. Si vous ne savez pas ce qui a cassé le code, il peut y avoir des dizaines, voire des centaines de <em>commits</em> depuis le dernier état où votre code fonctionnait et vous aimeriez certainement exécuter <code>git bisect</code> pour vous aider. La commande <code>bisect</code> effectue une recherche par dichotomie dans votre historique pour vous aider à identifier aussi vite que possible quel <em>commit</em> a vu le bogue naître.</p> </div> <div class="paragraph"> <p>Disons que vous venez juste de pousser une version finale de votre code en production, vous récupérez un rapport de bogue à propos de quelque chose qui n’arrivait pas dans votre environnement de développement, et vous n’arrivez pas à trouver pourquoi votre code le fait. Vous retournez sur votre code et il apparaît que vous pouvez reproduire le bogue mais vous ne savez pas ce qui se passe mal. Vous pouvez faire une recherche par dichotomie pour trouver ce qui ne va pas. D’abord, exécutez <code>git bisect start</code> pour démarrer la procédure, puis utilisez la commande <code>git bisect bad</code> pour dire que le <em>commit</em> courant est bogué. Ensuite, dites à <code>bisect</code> quand le code fonctionnait, en utilisant <code>git bisect good [bonne_version]</code> :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git bisect start $ git bisect bad $ git bisect good v1.0 Bisecting: 6 revisions left to test after this [ecb6e1bc347ccecc5f9350d878ce677feb13d3b2] error handling on repo</code></pre> </div> </div> <div class="paragraph"> <p>Git trouve qu’il y a environ 12 <em>commits</em> entre celui que vous avez marqué comme le dernier bon connu (v1.0) et la version courante qui n’est pas bonne, et il a récupéré le <em>commit</em> du milieu à votre place. À ce moment, vous pouvez dérouler vos tests pour voir si le bogue existait dans ce <em>commit</em>. Si c’est le cas, il a été introduit quelque part avant ce <em>commit</em> médian, sinon, il l’a été évidemment après. Il apparait que le bogue ne se reproduit pas ici, vous le dites à Git en tapant <code>git bisect good</code> et continuez votre périple :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git bisect good Bisecting: 3 revisions left to test after this [b047b02ea83310a70fd603dc8cd7a6cd13d15c04] secure this thing</code></pre> </div> </div> <div class="paragraph"> <p>Vous êtes maintenant sur un autre <em>commit</em>, à mi-chemin entre celui que vous venez de tester et votre <em>commit</em> bogué. Vous exécutez une nouvelle fois votre test et trouvez que ce <em>commit</em> est bogué, vous le dites à Git avec <code>git bisect bad</code> :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git bisect bad Bisecting: 1 revisions left to test after this [f71ce38690acf49c1f3c9bea38e09d82a5ce6014] drop exceptions table</code></pre> </div> </div> <div class="paragraph"> <p>Ce <em>commit</em>-ci est bon, et Git a maintenant toutes les informations dont il a besoin pour déterminer où le bogue a été créé. Il vous affiche le SHA-1 du premier <em>commit</em> bogué, quelques informations du <em>commit</em> et quels fichiers ont été modifiés dans celui-ci, vous pouvez donc trouver ce qui s’est passé pour créer ce bogue :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git bisect good b047b02ea83310a70fd603dc8cd7a6cd13d15c04 is first bad commit commit b047b02ea83310a70fd603dc8cd7a6cd13d15c04 Author: PJ Hyett <pjhyett@example.com> Date: Tue Jan 27 14:48:32 2009 -0800 secure this thing :040000 040000 40ee3e7821b895e52c1695092db9bdc4c61d1730 f24d3c6ebcfc639b1a3814550e62d60b8e68a8e4 M config</code></pre> </div> </div> <div class="paragraph"> <p>Lorsque vous avez fini, vous devez exécuter <code>git bisect reset</code> pour réinitialiser votre HEAD où vous étiez avant de commencer, ou vous travaillerez dans un répertoire de travail non clairement défini :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git bisect reset</code></pre> </div> </div> <div class="paragraph"> <p>C’est un outil puissant qui vous aidera à vérifier des centaines de <em>commits</em> en quelques minutes. En plus, si vous avez un script qui sort avec une valeur 0 s’il est bon et autre chose sinon, vous pouvez même automatiser <code>git bisect</code>. Premièrement vous lui spécifiez l’intervalle en lui fournissant les bon et mauvais <em>commits</em> connus. Vous pouvez faire cela en une ligne en les entrant à la suite de la commande <code>bisect start</code>, le mauvais <em>commit</em> d’abord :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git bisect start HEAD v1.0 $ git bisect run test-error.sh</code></pre> </div> </div> <div class="paragraph"> <p>Cela exécute automatiquement <code>test-error.sh</code> sur chaque <em>commit</em> jusqu’à ce que Git trouve le premier <em>commit</em> bogué. Vous pouvez également exécuter des commandes comme <code>make</code> ou <code>make tests</code> ou quoi que ce soit qui exécute des tests automatisés à votre place.</p> </div> </div> <div id="nav"><a href="/book/fr/v2/Utilitaires-Git-Rerere">prev</a> | <a href="/book/fr/v2/Utilitaires-Git-Sous-modules">next</a></div> </div> </div> </div> </div> <footer> <div class="site-source"> <a href="/site">About this site</a><br> Patches, suggestions, and comments are welcome. </div> <div class="sfc-member"> Git is a member of <a href="/sfc">Software Freedom Conservancy</a> </div> </footer> <a href="#top" class="no-js scrollToTop" id="scrollToTop" data-label="Scroll to top"> <img src="/images/icons/chevron-up@2x.png" width="20" height="20" alt="scroll-to-top"/> </a> <script src="/js/jquery-1.7.1.min.js"></script> <script src="/js/jquery-ui-1.8.18.custom.min.js"></script> <script src="/js/jquery.defaultvalue.js"></script> <script src="/js/session.min.js"></script> <script src="/js/application.min.js"></script> </div> </body> </html>