CINXE.COM
Git - Configuration de 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 - Configuration de 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/Customizing-Git-Git-Configuration">English</a>. </p> <p> Full translation available in <table> <tr><td><a href="/book/az/v2/Git%e2%80%99i-F%c9%99rdil%c9%99%c5%9fdirm%c9%99k-Git-Konfiqurasiyas%c4%b1">azərbaycan dili</a>,</td></tr> <tr><td><a href="/book/bg/v2/Git-%d0%bd%d0%b0-%d0%bd%d0%b8%d1%81%d0%ba%d0%be-%d0%bd%d0%b8%d0%b2%d0%be-Plumbing-%d0%b8-Porcelain-%d0%ba%d0%be%d0%bc%d0%b0%d0%bd%d0%b4%d0%b8">български език</a>,</td></tr> <tr><td><a href="/book/de/v2/Git-einrichten-Git-Konfiguration">Deutsch</a>,</td></tr> <tr><td><a href="/book/es/v2/Personalizaci%c3%b3n-de-Git-Configuraci%c3%b3n-de-Git">Español</a>,</td></tr> <tr><td><a href="/book/fr/v2/Personnalisation-de-Git-Configuration-de-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%82%ab%e3%82%b9%e3%82%bf%e3%83%9e%e3%82%a4%e3%82%ba-Git-%e3%81%ae%e8%a8%ad%e5%ae%9a">日本語</a>,</td></tr> <tr><td><a href="/book/ko/v2/Git%eb%a7%9e%ec%b6%a4-Git-%ec%84%a4%ec%a0%95%ed%95%98%ea%b8%b0">한국어</a>,</td></tr> <tr><td><a href="/book/nl/v2/Git-aanpassen-Git-configuratie">Nederlands</a>,</td></tr> <tr><td><a href="/book/ru/v2/%d0%9d%d0%b0%d1%81%d1%82%d1%80%d0%be%d0%b9%d0%ba%d0%b0-Git-%d0%9a%d0%be%d0%bd%d1%84%d0%b8%d0%b3%d1%83%d1%80%d0%b0%d1%86%d0%b8%d1%8f-Git">Русский</a>,</td></tr> <tr><td><a href="/book/sl/v2/Prilagoditev-Gita-Konfiguracija-Git">Slovenščina</a>,</td></tr> <tr><td><a href="/book/tl/v2/Pag-aangkop-sa-Sariling-Pangangailagan-ng-Git-Kompigurasyon-ng-Git">Tagalog</a>,</td></tr> <tr><td><a href="/book/uk/v2/%d0%9d%d0%b0%d0%bb%d0%b0%d1%88%d1%82%d1%83%d0%b2%d0%b0%d0%bd%d0%bd%d1%8f-Git-%d0%9a%d0%be%d0%bd%d1%84%d1%96%d0%b3%d1%83%d1%80%d0%b0%d1%86%d1%96%d1%8f-Git">Українська</a></td></tr> <tr><td><a href="/book/zh/v2/%e8%87%aa%e5%ae%9a%e4%b9%89-Git-%e9%85%8d%e7%bd%ae-Git">简体中文</a>,</td></tr> </table> </p> <p> Partial translations available in <table> <tr><td><a href="/book/cs/v2/Customizing-Git-Git-Configuration">Čeština</a>,</td></tr> <tr><td><a href="/book/mk/v2/%d0%9f%d0%b5%d1%80%d1%81%d0%be%d0%bd%d0%b0%d0%bb%d0%b8%d0%b7%d0%b0%d1%86%d0%b8%d1%98%d0%b0-%d0%bd%d0%b0-Git-Git-Configuration">Македонски</a>,</td></tr> <tr><td><a href="/book/pl/v2/Dostosowywanie-Gita-Konfiguracja-Gita">Polski</a>,</td></tr> <tr><td><a href="/book/sr/v2/%d0%9f%d1%80%d0%b8%d0%bb%d0%b0%d0%b3%d0%be%d1%92%d0%b0%d0%b2%d0%b0%d1%9a%d0%b5-%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%b0-%d0%93%d0%b8%d1%82-%d0%9a%d0%be%d0%bd%d1%84%d0%b8%d0%b3%d1%83%d1%80%d0%b8%d1%81%d0%b0%d1%9a%d0%b5-%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%b0-%d0%93%d0%b8%d1%82">Српски</a>,</td></tr> <tr><td><a href="/book/uz/v2/Customizing-Git-Git-Configuration">Ўзбекча</a>,</td></tr> <tr><td><a href="/book/zh-tw/v2/Customizing-Git-Git-Configuration">繁體中文</a>,</td></tr> </table> </p> <p> Translations started for <table> <tr><td><a href="/book/be/v2/Customizing-Git-Git-Configuration">Беларуская</a>,</td></tr> <tr><td><a href="/book/fa/v2/Customizing-Git-Git-Configuration" dir="rtl">فارسی</a>,</td></tr> <tr><td><a href="/book/id/v2/Kostumisasi-Git-Konfigurasi-Git">Indonesian</a>,</td></tr> <tr><td><a href="/book/it/v2/Customizing-Git-Git-Configuration">Italiano</a>,</td></tr> <tr><td><a href="/book/ms/v2/Customizing-Git-Git-Configuration">Bahasa Melayu</a>,</td></tr> <tr><td><a href="/book/pt-br/v2/Customizing-Git-Git-Configuration">Português (Brasil)</a>,</td></tr> <tr><td><a href="/book/pt-pt/v2/Personalizar-o-Git-Git-Configuration">Português (Portugal)</a>,</td></tr> <tr><td><a href="/book/sv/v2/Customizing-Git-Git-Configuration">Svenska</a>,</td></tr> <tr><td><a href="/book/tr/v2/Git%e2%80%99i-%c3%96zelle%c5%9ftirmek-Git-Yap%c4%b1land%c4%b1rmas%c4%b1">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">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" class="active">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>8.1 Personnalisation de Git - Configuration de Git</h1> <div> <p>Jusqu’ici, nous avons traité les bases du fonctionnement et de l’utilisation de Git et introduit un certain nombre d’outils fournis par Git pour travailler plus facilement et plus efficacement. Dans ce chapitre, nous aborderons quelques opérations permettant d’utiliser Git de manière plus personnalisée en vous présentant quelques paramètres de configuration importants et le système d’interceptions. Grâce à ces outils, il devient enfantin de faire fonctionner Git exactement comme vous, votre société ou votre communauté en avez besoin.</p> <h2 id="s_git_config">Configuration de Git</h2> <div class="paragraph"> <p> Comme vous avez pu l’entrevoir dans <a href="/book/fr/v2/ch00/ch01-getting-started">Démarrage rapide</a>, vous pouvez spécifier les paramètres de configuration de Git avec la commande <code>git config</code>. Une des premières choses que vous avez faites a été de paramétrer votre nom et votre adresse de courriel :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --global user.name "John Doe" $ git config --global user.email johndoe@example.com</code></pre> </div> </div> <div class="paragraph"> <p>À présent, vous allez apprendre quelques-unes des options similaires les plus intéressantes pour paramétrer votre usage de Git.</p> </div> <div class="paragraph"> <p>Vous avez vu des détails de configuration simple de Git au premier chapitre, mais nous allons les réviser. Git utilise une série de fichiers de configuration pour déterminer son comportement selon votre personnalisation. Le premier endroit que Git visite est le fichier <code>/etc/gitconfig</code> qui contient des valeurs pour tous les utilisateurs du système et tous leurs dépôts. Si vous passez l’option <code>--system</code> à <code>git config</code>, il lit et écrit ce fichier.</p> </div> <div class="paragraph"> <p>L’endroit suivant visité par Git est le fichier <code>~/.gitconfig</code> qui est spécifique à chaque utilisateur. Vous pouvez faire lire et écrire Git dans ce fichier au moyen de l’option <code>--global</code>.</p> </div> <div class="paragraph"> <p>Enfin, Git recherche des valeurs de configuration dans le fichier de configuration du répertoire Git (<code>.git/config</code>) du dépôt en cours d’utilisation. Ces valeurs sont spécifiques à un unique dépôt.</p> </div> <div class="paragraph"> <p>Chaque niveau surcharge le niveau précédent, ce qui signifie que les valeurs dans <code>.git/config</code> écrasent celles dans <code>/etc/gitconfig</code>.</p> </div> <div class="admonitionblock note"> <table> <tr> <td class="icon"> <div class="title">Note</div> </td> <td class="content"> <div class="paragraph"> <p>Ces fichiers de configuration Git sont des fichiers texte, donc vous pouvez positionner ces valeurs manuellement en éditant le fichier et en utilisant la syntaxe correcte, mais il reste généralement plus facile de lancer la commande <code>git config</code>.</p> </div> </td> </tr> </table> </div> <div class="sect3"> <h3 id="_configuration_de_base_dun_client">Configuration de base d’un client</h3> <div class="paragraph"> <p>Les options de configuration reconnues par Git tombent dans deux catégories : côté client et côté serveur. La grande majorité se situe côté client pour coller à vos préférences personnelles de travail. Parmi les tonnes d’options disponibles, seules les plus communes ou affectant significativement la manière de travailler seront couvertes. De nombreuses options ne s’avèrent utiles qu’en de rares cas et ne seront pas traitées. Pour voir la liste de toutes les options que votre version de Git reconnaît, vous pouvez lancer :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ man git-config</code></pre> </div> </div> <div class="paragraph"> <p>Cette commande affiche toutes les options disponibles avec quelques détails. Vous pouvez aussi trouver des informations de référence sur <a href="https://git-scm.com/docs/git-config.html" class="bare">https://git-scm.com/docs/git-config.html</a>.</p> </div> <div class="sect4"> <h4 id="_core_editor"><code>core.editor</code></h4> <div class="paragraph"> <p> Par défaut, Git utilise votre éditeur par défaut (<code>$VISUAL</code> ou <code>$EDITOR</code>) ou se replie sur l’éditeur Vi pour la création et l’édition des messages de validation et d’étiquetage. Pour modifier ce programme par défaut pour un autre, vous pouvez utiliser le paramètre <code>core.editor</code> :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --global core.editor emacs</code></pre> </div> </div> <div class="paragraph"> <p>Maintenant, quel que soit votre éditeur par défaut, Git démarrera Emacs pour éditer les messages.</p> </div> </div> <div class="sect4"> <h4 id="_commit_template"><code>commit.template</code></h4> <div class="paragraph"> <p> Si vous réglez ceci sur le chemin d’un fichier sur votre système, Git utilisera ce fichier comme message par défaut quand vous validez. L’intérêt de créer un modèle de message de validation est que vous pouvez l’utiliser pour vous rappeler (ou rappeler aux autres) du format et du style corrects pour créer un message de validation.</p> </div> <div class="paragraph"> <p>Par exemple, supposons que vous créiez un fichier modèle dans <code>$HOME/.gitmessage.txt</code> qui ressemble à ceci :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code>ligne de sujet (essayer de la garder sous 50 caractères) description multiligne du commit ajouter tous les détails que vous voulez [ticket: X]</code></pre> </div> </div> <div class="paragraph"> <p>Notez comment ce modèle de validation rappelle au validateur de conserver une ligne de titre courte (pour coller avec la sortie de <code>git log --oneline</code>), et d’ajouter de plus amples détails dessous, et de faire référence à un incident ou un numéro de ticket dans un système de suivi de ticket s’il existe.</p> </div> <div class="paragraph"> <p>Pour indiquer à Git de l’utiliser pour le message par défaut qui apparaîtra dans votre éditeur quand vous lancerez <code>git commit</code>, réglez le paramètre de configuration <code>commit.template</code> :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --global commit.template ~/.gitmessage.txt $ git commit</code></pre> </div> </div> <div class="paragraph"> <p>Ainsi, votre éditeur ouvrira quelque chose ressemblant à ceci comme modèle de message de validation :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code>ligne de sujet description [ticket: X] # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # On branch master # Changes to be committed: # (use "git reset HEAD <file>..." to unstage) # # modified: lib/test.rb # ~ ~ ".git/COMMIT_EDITMSG" 14L, 297C</code></pre> </div> </div> <div class="paragraph"> <p>Si vous avez une règle de messages de validation, placez un modèle de cette règle sur votre système et configurez Git pour qu’il l’utilise par défaut, cela améliorera les chances que cette règle soit effectivement suivie.</p> </div> </div> <div class="sect4"> <h4 id="_core_pager"><code>core.pager</code></h4> <div class="paragraph"> <p> Le paramètre <code>core.pager</code> détermine quel <em>pager</em> est utilisé lorsque des pages de Git sont émises, par exemple lors d’un <code>log</code> ou d’un <code>diff</code>. Vous pouvez le fixer à <code>more</code> ou à votre <em>pager</em> favori (par défaut, il vaut <code>less</code>) ou vous pouvez le désactiver en fixant sa valeur à une chaîne vide :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --global core.pager ''</code></pre> </div> </div> <div class="paragraph"> <p>Si vous lancez cela, Git affichera la totalité du résultat de toutes les commandes d’une traite, quelle que soit sa longueur.</p> </div> </div> <div class="sect4"> <h4 id="_user_signingkey"><code>user.signingkey</code></h4> <div class="paragraph"> <p> Si vous faites des étiquettes annotées signées (comme décrit dans <a href="/book/fr/v2/ch00/s_signing">Signer votre travail</a>), simplifiez-vous la vie en définissant votre clé GPG de signature en paramètre de configuration. Définissez votre ID de clé ainsi :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --global user.signingkey <gpg-key-id></code></pre> </div> </div> <div class="paragraph"> <p>Maintenant, vous pouvez signer vos étiquettes sans devoir spécifier votre clé à chaque fois que vous utilisez la commande <code>git tag</code> :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git tag -s <nom-étiquette></code></pre> </div> </div> </div> <div class="sect4"> <h4 id="_core_excludesfile"><code>core.excludesfile</code></h4> <div class="paragraph"> <p> Comme décrit dans <a href="/book/fr/v2/ch00/s_ignoring">Ignorer des fichiers</a>, vous pouvez ajouter des patrons dans le fichier <code>.gitignore</code> de votre projet pour indiquer à Git de ne pas considérer certains fichiers comme non suivis ou pour éviter de les indexer lorsque vous lancez <code>git add</code> sur eux.</p> </div> <div class="paragraph"> <p>Mais vous pouvez souhaiter dans quelques cas ignorer certains fichiers dans tous vos dépôts. Si votre ordinateur utilise macOS, vous connaissez certainement les fichiers <code>.DS_Store</code>. Si votre éditeur préféré est Emacs ou Vim, vous connaissez sûrement aussi les fichiers qui se terminent par <code>~</code> ou <code>.swp</code>.</p> </div> <div class="paragraph"> <p>Cette option vous permet d’écrire un fichier <code>.gitignore</code> global. Si vous créez un fichier <code>~/.gitignore_global</code> contenant ceci :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code>*~ .*.swp .DS_Store</code></pre> </div> </div> <div class="paragraph"> <p>et que vous lancez <code>git config --global core.excludesfile ~/.gitignore_global</code>, Git ne vous importunera plus avec ces fichiers.</p> </div> </div> <div class="sect4"> <h4 id="_help_autocorrect"><code>help.autocorrect</code></h4> <div class="paragraph"> <p> Si vous avez fait une faute de frappe en tapant une commande Git, il vous affiche quelque chose comme :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git chekcout master git : 'chekcout' n'est pas une commande git. Voir 'git --help'. Vouliez-vous dire cela ? checkout</code></pre> </div> </div> <div class="paragraph"> <p>Git essaie de deviner ce que vous avez voulu dire, mais continue de refuser de le faire. Si vous positionnez le paramètre <code>help.autocorrect</code> à 1, Git va réellement lancer cette commande à votre place :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git chekcout master ATTENTION : vous avez invoqué une commande Git nommée 'chekcout' qui n'existe pas. Continuons en supposant que vous avez voulu dire 'checkout' dans 0.1 secondes automatiquement...</code></pre> </div> </div> <div class="paragraph"> <p>Notez l’histoire des « 0.1 secondes ». <code>help.autocorrect</code> est un fait un entier qui représente des dixièmes de seconde. Ainsi, si vous le réglez à 50, Git vous laissera 5 secondes pour changer d’avis avant de lancer la commande qu’il aura devinée.</p> </div> </div> </div> <div class="sect3"> <h3 id="_couleurs_dans_git">Couleurs dans Git</h3> <div class="paragraph"> <p> Git sait coloriser ses affichages dans votre terminal, ce qui peut faciliter le parcours visuel des résultats. Un certain nombre d’options peuvent vous aider à régler la colorisation à votre goût.</p> </div> <div class="sect4"> <h4 id="_color_ui"><code>color.ui</code></h4> <div class="paragraph"> <p>Git colorise automatiquement la plupart de ses affichages mais il existe une option globale pour désactiver ce comportement. Pour désactiver toute la colorisation par défaut, lancez ceci :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --global color.ui false</code></pre> </div> </div> <div class="paragraph"> <p>La valeur par défaut est <code>auto</code>, ce qui colorise la sortie lorsque celle-ci est destinée à un terminal, mais élimine les codes de contrôle de couleur quand la sortie est redirigée dans un fichier ou l’entrée d’une autre commande.</p> </div> <div class="paragraph"> <p>Vous pouvez aussi la régler à <code>always</code> (toujours) pour activer la colorisation en permanence. C’est une option rarement utile. Dans la plupart des cas, si vous tenez vraiment à coloriser vos sorties redirigées, vous pourrez passer le drapeau <code>--color</code> à la commande Git pour la forcer à utiliser les codes de couleur. Le réglage par défaut est donc le plus utilisé.</p> </div> </div> <div class="sect4"> <h4 id="_color"><code>color.*</code></h4> <div class="paragraph"> <p>Si vous souhaitez être plus spécifique concernant les commandes colorisées, Git propose des paramètres de colorisation par action. Chacun peut être fixé à <code>true</code>, <code>false</code> ou <code>always</code>.</p> </div> <div class="literalblock"> <div class="content"> <pre>color.branch color.diff color.interactive color.status</pre> </div> </div> <div class="paragraph"> <p>De plus, chacun d’entre eux dispose d’un sous-ensemble de paramètres qui permettent de surcharger les couleurs pour des parties des affichages. Par exemple, pour régler les couleurs de méta-informations du diff avec une écriture en bleu gras (<em>bold</em> en anglais) sur fond noir :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --global color.diff.meta "blue black bold"</code></pre> </div> </div> <div class="paragraph"> <p>La couleur peut prendre les valeurs suivantes : <em>normal</em>, <em>black</em>, <em>red</em>, <em>green</em>, <em>yellow</em>, <em>blue</em>, <em>magenta</em>, <em>cyan</em> ou <em>white</em>. Si vous souhaitez ajouter un attribut de casse, les valeurs disponibles sont <em>bold</em> (gras), <em>dim</em> (léger), <em>ul</em> (<em>underlined</em>, souligné), <em>blink</em> (clignotant) et <em>reverse</em> (inversé).</p> </div> </div> </div> <div class="sect3"> <h3 id="s_external_merge_tools">Outils externes de fusion et de différence</h3> <div class="paragraph"> <p> Bien que Git ait une implémentation interne de diff que vous avez déjà utilisée, vous pouvez sélectionner à la place un outil externe. Vous pouvez aussi sélectionner un outil graphique pour la fusion et la résolution de conflit au lieu de devoir résoudre les conflits manuellement. Je démontrerai le paramétrage avec Perforce Merge Tool (P4Merge) pour visualiser vos différences et résoudre vos fusions parce que c’est un outil graphique agréable et gratuit.</p> </div> <div class="paragraph"> <p>Si vous voulez l’essayer, P4Merge fonctionne sur tous les principaux systèmes d’exploitation. Dans cet exemple, je vais utiliser la forme des chemins usitée sur macOS et Linux. Pour Windows, vous devrez changer <code>/usr/local/bin</code> en un chemin d’exécution d’un programme de votre environnement.</p> </div> <div class="paragraph"> <p>Pour commencer, téléchargez P4Merge depuis <a href="https://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools" class="bare">https://www.perforce.com/product/components/perforce-visual-merge-and-diff-tools</a>. Ensuite, il faudra mettre en place un script d’enrobage pour lancer les commandes. Je vais utiliser le chemin macOS pour l’exécutable ; dans d’autres systèmes, il résidera où votre binaire <code>p4merge</code> a été installé. Créez un script enveloppe nommé <code>extMerge</code> qui appelle votre binaire avec tous les arguments fournis :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ cat /usr/local/bin/extMerge #!/bin/sh /Applications/p4merge.app/Contents/MacOS/p4merge $*</code></pre> </div> </div> <div class="paragraph"> <p>L’enveloppe diff s’assure que sept arguments ont été fournis et en passe deux à votre script de fusion. Par défaut, Git passe au programme de diff les arguments suivants :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code>chemin ancien-fichier ancien-hex ancien-mode nouveau-fichier nouveau-hex nouveau-mode</code></pre> </div> </div> <div class="paragraph"> <p>Comme seuls les arguments <code>ancien-fichier</code> et <code>nouveau-fichier</code> sont nécessaires, vous utilisez le script d’enveloppe pour passer ceux dont vous avez besoin.</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ cat /usr/local/bin/extDiff #!/bin/sh [ $# -eq 7 ] && /usr/local/bin/extMerge "$2" "$5"</code></pre> </div> </div> <div class="paragraph"> <p>Vous devez aussi vous assurer que ces fichiers sont exécutables :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ sudo chmod +x /usr/local/bin/extMerge $ sudo chmod +x /usr/local/bin/extDiff</code></pre> </div> </div> <div class="paragraph"> <p>À présent, vous pouvez régler votre fichier de configuration pour utiliser vos outils personnalisés de résolution de fusion et de différence. Pour cela, il faut un certain nombre de personnalisations : <code>merge.tool</code> pour indiquer à Git quelle stratégie utiliser, <code>mergetool.<tool>.cmd</code> pour spécifier comment lancer cette commande, <code>mergetool.<tool>.trustExitCode</code> pour indiquer à Git si le code de sortie du programme indique une résolution de fusion réussie ou non et <code>diff.external</code> pour indiquer à Git quelle commande lancer pour les différences. Ainsi, vous pouvez lancer les quatre commandes :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --global merge.tool extMerge $ git config --global mergetool.extMerge.cmd \ 'extMerge "$BASE" "$LOCAL" "$REMOTE" "$MERGED"' $ git config --global mergetool.trustExitCode false $ git config --global diff.external extDiff</code></pre> </div> </div> <div class="paragraph"> <p>ou vous pouvez éditer votre fichier <code>~/.gitconfig</code> pour y ajouter ces lignes :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-ini" data-lang="ini">[merge] tool = extMerge [mergetool "extMerge"] cmd = extMerge "$BASE" "$LOCAL" "$REMOTE" "$MERGED" trustExitCode = false [diff] external = extDiff</code></pre> </div> </div> <div class="paragraph"> <p>Après avoir réglé tout ceci, si vous lancez des commandes de diff telles que celle-ci :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git diff 32d1776b1^ 32d1776b1</code></pre> </div> </div> <div class="paragraph"> <p>Au lieu d’obtenir la sortie du diff dans le terminal, Git lance P4Merge, ce qui ressemble à ceci :</p> </div> <div class="imageblock"> <div class="content"> <img src="/book/fr/v2/images/p4merge.png" alt="P4Merge."> </div> <div class="title">Figure 142. P4Merge.</div> </div> <div class="paragraph"> <p>Si vous essayez de fusionner deux branches et créez des conflits de fusion, vous pouvez lancer la commande <code>git mergetool</code> qui démarrera P4Merge pour vous laisser résoudre les conflits au moyen d’un outil graphique.</p> </div> <div class="paragraph"> <p>Le point agréable avec cette méthode d’enveloppe est que vous pouvez changer facilement d’outils de diff et de fusion. Par exemple, pour changer vos outils <code>extDiff</code> et <code>extMerge</code> pour une utilisation de l’outil KDiff3, il vous suffit d’éditer le fichier <code>extMerge</code> :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ cat /usr/local/bin/extMerge #!/bin/sh /Applications/kdiff3.app/Contents/MacOS/kdiff3 $*</code></pre> </div> </div> <div class="paragraph"> <p>À présent, Git va utiliser l’outil KDiff3 pour visualiser les différences et résoudre les conflits de fusion.</p> </div> <div class="paragraph"> <p>Git est livré préréglé avec un certain nombre d’autres outils de résolution de fusion pour vous éviter d’avoir à gérer la configuration <code>cmd</code>. Pour obtenir une liste des outils qu’il supporte, essayez ceci :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git mergetool --tool-help 'git mergetool --tool=<tool>' may be set to one of the following: emerge gvimdiff gvimdiff2 opendiff p4merge vimdiff vimdiff2 The following tools are valid, but not currently available: araxis bc3 codecompare deltawalker diffmerge diffuse ecmerge kdiff3 meld tkdiff tortoisemerge xxdiff Some of the tools listed above only work in a windowed environment. If run in a terminal-only session, they will fail.</code></pre> </div> </div> <div class="paragraph"> <p>Si KDiff3 ne vous intéresse pas pour gérer les différences mais seulement pour la résolution de fusion et qu’il est présent dans votre chemin d’exécution, vous pouvez lancer :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --global merge.tool kdiff3</code></pre> </div> </div> <div class="paragraph"> <p>Si vous lancez ceci au lieu de modifier les fichiers <code>extMerge</code> ou <code>extDiff</code>, Git utilisera KDiff3 pour les résolutions de fusion et l’outil diff normal de Git pour les différences.</p> </div> </div> <div class="sect3"> <h3 id="_formatage_et_espaces_blancs">Formatage et espaces blancs</h3> <div class="paragraph"> <p> Les problèmes de formatage et de blancs sont parmi les plus subtils et frustrants que les développeurs rencontrent lorsqu’ils collaborent, spécifiquement d’une plate-forme à l’autre. Il est très facile d’introduire des modifications subtiles de blancs lors de soumission de patchs ou d’autres modes de collaboration, car les éditeurs de texte les insèrent silencieusement ou les programmeurs Windows ajoutent des retours chariot à la fin des lignes qu’ils modifient. Git dispose de quelques options de configuration pour traiter ces problèmes.</p> </div> <div class="sect4"> <h4 id="_core_autocrlf"><code>core.autocrlf</code></h4> <div class="paragraph"> <p> Si vous programmez vous-même sous Windows ou si vous utilisez un autre système d’exploitation mais devez travailler avec des personnes travaillant sous Windows, vous rencontrerez à un moment ou à un autre des problèmes de caractères de fin de ligne. Ceci est dû au fait que Windows utilise pour marquer les fins de ligne dans ses fichiers un caractère « retour chariot » (<em>carriage return</em>, CR) suivi d’un caractère « saut de ligne » (<em>line feed</em>, LF), tandis que macOS et Linux utilisent seulement le caractère « saut de ligne ». C’est un cas subtil mais incroyablement ennuyeux de problème généré par la collaboration inter plate-forme.</p> </div> <div class="paragraph"> <p>Git peut gérer ce cas en convertissant automatiquement les fins de ligne CRLF en LF lorsque vous validez, et inversement lorsqu’il extrait des fichiers sur votre système. Vous pouvez activer cette fonctionnalité au moyen du paramètre <code>core.autocrlf</code>. Si vous avez une machine Windows, positionnez-le à <code>true</code>. Git convertira les fins de ligne de LF en CRLF lorsque vous extrairez votre code :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --global core.autocrlf true</code></pre> </div> </div> <div class="paragraph"> <p>Si vous utilisez un système Linux ou macOS qui utilise les fins de ligne LF, vous ne souhaitez sûrement pas que Git les convertisse automatiquement lorsque vous extrayez des fichiers. Cependant, si un fichier contenant des CRLF est accidentellement introduit en gestion de versions, vous souhaitez que Git le corrige. Vous pouvez indiquer à Git de convertir CRLF en LF lors de la validation mais pas dans l’autre sens en fixant <code>core.autocrlf</code> à <code>input</code> :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --global core.autocrlf input</code></pre> </div> </div> <div class="paragraph"> <p>Ce réglage devrait donner des fins de ligne en CRLF lors d’extraction sous Windows mais en LF sous macOS et Linux et dans le dépôt.</p> </div> <div class="paragraph"> <p>Si vous êtes un programmeur Windows gérant un projet spécifique à Windows, vous pouvez désactiver cette fonctionnalité et forcer l’enregistrement des « retour chariot » dans le dépôt en réglant la valeur du paramètre à <code>false</code> :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --global core.autocrlf false</code></pre> </div> </div> </div> <div class="sect4"> <h4 id="_core_whitespace"><code>core.whitespace</code></h4> <div class="paragraph"> <p>Git est paramétré par défaut pour détecter et corriger certains problèmes de blancs. Il peut rechercher six problèmes de blancs de base. La correction de trois problèmes est activée par défaut et peut être désactivée et celle des trois autres n’est pas activée par défaut mais peut être activée.</p> </div> <div class="paragraph"> <p>Les trois activées par défaut sont <code>blank-at-eol</code> qui détecte les espaces en fin de ligne, <code>blank-at-eof</code> qui détecte les espaces en fin de fichier et <code>space-before-tab</code> qui recherche les espaces avant les tabulations au début d’une ligne.</p> </div> <div class="paragraph"> <p>Les trois autres qui sont désactivées par défaut mais peuvent être activées sont <code>indent-with-non-tab</code> qui recherche des lignes qui commencent par des espaces au lieu de tabulations (contrôlé par l’option <code>tabwidth</code>), <code>tab-in-indent</code> qui recherche les tabulations dans la portion d’indentation d’une ligne et <code>cr-at-eol</code> qui indique à Git que les « retour chariot » en fin de ligne sont acceptés.</p> </div> <div class="paragraph"> <p>Vous pouvez indiquer à Git quelle correction vous voulez activer en fixant <code>core.whitespace</code> avec les valeurs que vous voulez ou non, séparées par des virgules. Vous pouvez désactiver des réglages en les éliminant de la chaîne de paramétrage ou en les préfixant avec un <code>-</code>. Par exemple, si vous souhaitez activer tout sauf <code>space-before-tab</code>, vous pouvez lancer ceci (avec <code>trailing-space</code> comme raccourci pour à la fois <code>blank-at-eol</code> et <code>blank-at-eof</code>) :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --global core.whitespace \ trailing-space,-space-before-tab,indent-with-non-tab,tab-in-indent,cr-at-eol</code></pre> </div> </div> <div class="paragraph"> <p>Ou vous pouvez spécifier seulement la partie personnalisée :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --global core.whitespace \ -space-before-tab,indent-with-non-tab,tab-in-indent,cr-at-eol</code></pre> </div> </div> <div class="paragraph"> <p>Git va détecter ces problèmes quand vous lancez une commande <code>git diff</code> et essayer de les coloriser pour vous permettre de les régler avant de valider. Il utilisera aussi ces paramètres pour vous aider quand vous appliquerez des patchs avec <code>git apply</code>. Quand vous appliquez des patchs, vous pouvez paramétrer Git pour qu’il vous avertisse s’il doit appliquer des patchs qui présentent les défauts de blancs :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git apply --whitespace=warn <rustine></code></pre> </div> </div> <div class="paragraph"> <p>Ou vous pouvez indiquer à Git d’essayer de corriger automatiquement le problème avant d’appliquer le patch :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git apply --whitespace=fix <rustine></code></pre> </div> </div> <div class="paragraph"> <p>Ces options s’appliquent aussi à <code>git rebase</code>. Si vous avez validé avec des problèmes de blancs mais n’avez pas encore poussé en amont, vous pouvez lancer un <code>rebase</code> avec l’option <code>--whitespace=fix</code> pour faire corriger à Git les erreurs de blancs pendant qu’il réécrit les patchs.</p> </div> </div> </div> <div class="sect3"> <h3 id="_configuration_du_serveur">Configuration du serveur</h3> <div class="paragraph"> <p>Il n’y a pas autant d’options de configuration de Git côté serveur, mais en voici quelques unes intéressantes dont il est utile de prendre note.</p> </div> <div class="sect4"> <h4 id="_receive_fsckobjects"><code>receive.fsckObjects</code></h4> <div class="paragraph"> <p>Git est capable de vérifier que tous les objets reçus pendant une poussée correspondent à leur somme de contrôle SHA-1 et qu’ils pointent sur des objets valides. Cependant, il ne le fait pas par défaut sur chaque poussée. C’est une opération relativement lourde qui peut énormément allonger les poussées selon la taille du dépôt ou de la poussée. Si vous voulez que Git vérifie la cohérence des objets à chaque poussée, vous pouvez le forcer en fixant le paramètre <code>receive.fsckObjects</code> à <code>true</code> :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --system receive.fsckObjects true</code></pre> </div> </div> <div class="paragraph"> <p>Maintenant, Git va vérifier l’intégrité de votre dépôt avant que chaque poussée ne soit acceptée pour s’assurer que des clients défectueux (ou malicieux) n’introduisent pas des données corrompues.</p> </div> </div> <div class="sect4"> <h4 id="_receive_denynonfastforwards"><code>receive.denyNonFastForwards</code></h4> <div class="paragraph"> <p>Si vous rebasez des <em>commits</em> que vous avez déjà poussés, puis essayez de pousser à nouveau, ou inversement, si vous essayez de pousser un <em>commit</em> sur une branche distante qui ne contient pas le <em>commit</em> sur lequel la branche distante pointe, votre essai échouera. C’est généralement une bonne politique, mais dans le cas d’un rebasage, vous pouvez décider que vous savez ce que vous faites et forcer la mise à jour de la branche distante en ajoutant l’option <code>-f</code> à votre commande.</p> </div> <div class="paragraph"> <p>Pour désactiver la possibilité de forcer la mise à jour des branches distantes autres qu’en avance rapide, réglez <code>receive.denyNonFastForwards</code> :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --system receive.denyNonFastForwards true</code></pre> </div> </div> <div class="paragraph"> <p>Un autre moyen de faire consiste à utiliser des crochets côté-serveur, point qui sera abordé plus loin. Cette autre approche permet de réaliser des traitements plus complexes comme de refuser l’avance rapide seulement à un certain groupe d’utilisateurs.</p> </div> </div> <div class="sect4"> <h4 id="_receive_denydeletes"><code>receive.denyDeletes</code></h4> <div class="paragraph"> <p>Un des contournements possible à la politique <code>denyNonFastForwards</code> consiste à simplement effacer la branche distante et à la repousser avec les nouvelles références. Pour interdire ceci, réglez <code>receive.denyDeletes</code> à <code>true</code> :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git config --system receive.denyDeletes true</code></pre> </div> </div> <div class="paragraph"> <p>Ceci interdit la suppression de branches ou d’étiquettes. Aucun utilisateur n’en a le droit. Pour pouvoir effacer des branches distantes, vous devez effacer manuellement les fichiers de référence sur le serveur. Il existe aussi des moyens plus intéressants de gérer cette politique utilisateur par utilisateur au moyen des listes de contrôle d’accès, point qui sera abordé dans <a href="/book/fr/v2/ch00/s_an_example_git_enforced_policy">Exemple de politique gérée par Git</a>.</p> </div> </div> </div> <div id="nav"><a href="/book/fr/v2/Utilitaires-Git-Résumé">prev</a> | <a href="/book/fr/v2/Personnalisation-de-Git-Attributs-Git">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>