CINXE.COM

Git - Maintenance et récupération de données

<!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 - Maintenance et récupération de données</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-Internals-Maintenance-and-Data-Recovery">English</a>. </p> <p> Full translation available in <table> <tr><td><a href="/book/az/v2/Git%e2%80%99in-Daxili-%c4%b0%c5%9fl%c9%99ri-Maintenance-v%c9%99-M%c9%99lumatlar%c4%b1n-B%c9%99rpas%c4%b1">azərbaycan dili</a>,</td></tr> <tr><td><a href="/book/bg">български език</a>,</td></tr> <tr><td><a href="/book/de/v2/Git-Interna-Wartung-und-Datenwiederherstellung">Deutsch</a>,</td></tr> <tr><td><a href="/book/es/v2/Los-entresijos-internos-de-Git-Mantenimiento-y-recuperaci%c3%b3n-de-datos">Español</a>,</td></tr> <tr><td><a href="/book/fr/v2/Les-tripes-de-Git-Maintenance-et-r%c3%a9cup%c3%a9ration-de-donn%c3%a9es">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%e5%86%85%e5%81%b4-%e3%83%a1%e3%83%b3%e3%83%86%e3%83%8a%e3%83%b3%e3%82%b9%e3%81%a8%e3%83%87%e3%83%bc%e3%82%bf%e3%83%aa%e3%82%ab%e3%83%90%e3%83%aa">日本語</a>,</td></tr> <tr><td><a href="/book/ko/v2/Git%ec%9d%98-%eb%82%b4%eb%b6%80-%ec%9a%b4%ec%98%81-%eb%b0%8f-%eb%8d%b0%ec%9d%b4%ed%84%b0-%eb%b3%b5%ea%b5%ac">한국어</a>,</td></tr> <tr><td><a href="/book/nl/v2/Git-Binnenwerk-Onderhoud-en-gegevensherstel">Nederlands</a>,</td></tr> <tr><td><a href="/book/ru/v2/Git-%d0%b8%d0%b7%d0%bd%d1%83%d1%82%d1%80%d0%b8-%d0%9e%d0%b1%d1%81%d0%bb%d1%83%d0%b6%d0%b8%d0%b2%d0%b0%d0%bd%d0%b8%d0%b5-%d1%80%d0%b5%d0%bf%d0%be%d0%b7%d0%b8%d1%82%d0%be%d1%80%d0%b8%d1%8f-%d0%b8-%d0%b2%d0%be%d1%81%d1%81%d1%82%d0%b0%d0%bd%d0%be%d0%b2%d0%bb%d0%b5%d0%bd%d0%b8%d0%b5-%d0%b4%d0%b0%d0%bd%d0%bd%d1%8b%d1%85">Русский</a>,</td></tr> <tr><td><a href="/book/sl/v2/Notranjost-Gita-Vzdr%c5%beevanje-in-obnovitev-podatkov">Slovenščina</a>,</td></tr> <tr><td><a href="/book/tl/v2/Mga-Panloob-ng-GIT-Pagpapanatili-At-Pagbalik-ng-Datos">Tagalog</a>,</td></tr> <tr><td><a href="/book/uk/v2/Git-%d0%b7%d1%81%d0%b5%d1%80%d0%b5%d0%b4%d0%b8%d0%bd%d0%b8-%d0%a1%d1%83%d0%bf%d1%80%d0%be%d0%b2%d0%be%d0%b4%d0%b6%d0%b5%d0%bd%d0%bd%d1%8f-%d1%82%d0%b0-%d0%b2%d1%96%d0%b4%d0%bd%d0%be%d0%b2%d0%bb%d0%b5%d0%bd%d0%bd%d1%8f-%d0%b4%d0%b0%d0%bd%d0%b8%d1%85">Українська</a></td></tr> <tr><td><a href="/book/zh/v2/Git-%e5%86%85%e9%83%a8%e5%8e%9f%e7%90%86-%e7%bb%b4%e6%8a%a4%e4%b8%8e%e6%95%b0%e6%8d%ae%e6%81%a2%e5%a4%8d">简体中文</a>,</td></tr> </table> </p> <p> Partial translations available in <table> <tr><td><a href="/book/cs/v2/Git-Internals-Spr%c3%a1va-a-obnova-dat">Čeština</a>,</td></tr> <tr><td><a href="/book/mk/v2/%d0%92%d0%bd%d0%b0%d1%82%d1%80%d0%b5%d1%88%d0%bd%d0%be%d1%81%d1%82%d0%b0-%d0%bd%d0%b0-Git-Maintenance-and-Data-Recovery">Македонски</a>,</td></tr> <tr><td><a href="/book/pl/v2/Mechanizmy-wewn%c4%99trzne-w-Git-Konserwacja-i-odzyskiwanie-danych">Polski</a>,</td></tr> <tr><td><a href="/book/sr/v2/%d0%93%d0%b8%d1%82-%d0%b8%d0%b7%d0%bd%d1%83%d1%82%d1%80%d0%b0-%d0%9e%d0%b4%d1%80%d0%b6%d0%b0%d0%b2%d0%b0%d1%9a%d0%b5-%d0%b8-%d0%be%d0%bf%d0%be%d1%80%d0%b0%d0%b2%d0%b0%d0%ba-%d0%bf%d0%be%d0%b4%d0%b0%d1%82%d0%b0%d0%ba">Српски</a>,</td></tr> <tr><td><a href="/book/uz/v2/Git-Internals-Maintenance-and-Data-Recovery">Ўзбекча</a>,</td></tr> <tr><td><a href="/book/zh-tw/v2/Git-Internals-Maintenance-and-Data-Recovery">繁體中文</a>,</td></tr> </table> </p> <p> Translations started for <table> <tr><td><a href="/book/be/v2/Git-Internals-Maintenance-and-Data-Recovery">Беларуская</a>,</td></tr> <tr><td><a href="/book/fa/v2/Git-Internals-Maintenance-and-Data-Recovery" dir="rtl">فارسی</a>,</td></tr> <tr><td><a href="/book/id/v2/Git-Internals-Maintenance-and-Data-Recovery">Indonesian</a>,</td></tr> <tr><td><a href="/book/it/v2/Git-Internals-Maintenance-and-Data-Recovery">Italiano</a>,</td></tr> <tr><td><a href="/book/ms/v2/Git-Internals-Maintenance-and-Data-Recovery">Bahasa Melayu</a>,</td></tr> <tr><td><a href="/book/pt-br/v2/Funcionamento-Interno-do-Git-Maintenance-and-Data-Recovery">Português (Brasil)</a>,</td></tr> <tr><td><a href="/book/pt-pt/v2/Internos-do-Git-Maintenance-and-Data-Recovery">Português (Portugal)</a>,</td></tr> <tr><td><a href="/book/sv/v2/Git-Internals-Maintenance-and-Data-Recovery">Svenska</a>,</td></tr> <tr><td><a href="/book/tr/v2/Dahili-Git-%c3%96geleri-Bak%c4%b1m-ve-Veri-Kurtarma">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">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" class="active">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>10.7 Les tripes de Git - Maintenance et récupération de données</h1> <div> <h2 id="_maintenance_et_récupération_de_données">Maintenance et récupération de données</h2> <div class="paragraph"> <p>Parfois, vous aurez besoin de faire un peu de ménage : rendre un dépôt plus compact, nettoyer les dépôts importés, ou récupérer du travail perdu. Cette section couvrira certains de ces scénarios.</p> </div> <div class="sect3"> <h3 id="s_git_gc">Maintenance</h3> <div class="paragraph"> <p>De temps en temps, Git exécute automatiquement une commande appelée « auto gc ». La plupart du temps, cette commande ne fait rien. Cependant, s’il y a trop d’objets bruts (des objets qui ne sont pas dans des fichiers groupés), ou trop de fichiers groupés, Git lance une commande <code>git gc</code> à part entière. « gc » est l’abréviation de « garbage collect » (ramasse-miettes) et la commande fait plusieurs choses : elle rassemble plusieurs objets bruts et les place dans des fichiers groupés, elle rassemble des fichiers groupés en un gros fichier groupé et elle supprime des objets qui ne sont plus accessibles depuis aucun <em>commit</em> et qui sont vieux de plusieurs mois.</p> </div> <div class="paragraph"> <p>Vous pouvez exécuter <code>auto gc</code> manuellement :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git gc --auto</code></pre> </div> </div> <div class="paragraph"> <p>Encore une fois, cela ne fait généralement rien. Vous devez avoir environ 7 000 objets bruts ou plus de 50 fichiers groupés pour que Git appelle une vraie commande <code>gc</code>. Vous pouvez modifier ces limites avec les propriétés de configuration <code>gc.auto</code> et <code>gc.autoPackLimit</code>, respectivement.</p> </div> <div class="paragraph"> <p><code>gc</code> regroupera aussi vos références dans un seul fichier. Supposons que votre dépôt contienne les branches et étiquettes suivantes :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ find .git/refs -type f .git/refs/heads/experiment .git/refs/heads/master .git/refs/tags/v1.0 .git/refs/tags/v1.1</code></pre> </div> </div> <div class="paragraph"> <p>Si vous exécutez <code>git gc</code>, vous n’aurez plus ces fichiers dans votre répertoire <code>refs</code>. Git les déplacera pour plus d’efficacité dans un fichier nommé <code>.git/packed-refs</code> qui ressemble à ceci :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ cat .git/packed-refs # pack-refs with: peeled fully-peeled cac0cab538b970a37ea1e769cbbde608743bc96d refs/heads/experiment ab1afef80fac8e34258ff41fc1b867c702daa24b refs/heads/master cac0cab538b970a37ea1e769cbbde608743bc96d refs/tags/v1.0 9585191f37f7b0fb9444f35a9bf50de191beadc2 refs/tags/v1.1 ^1a410efbd13591db07496601ebc7a059dd55cfe9</code></pre> </div> </div> <div class="paragraph"> <p>Si vous mettez à jour une référence, Git ne modifiera pas ce fichier, mais enregistrera plutôt un nouveau fichier dans <code>refs/heads</code>. Pour obtenir l’empreinte SHA-1 appropriée pour une référence donnée, Git cherche d’abord cette référence dans le répertoire <code>refs</code>, puis dans le fichier <code>packed-refs</code> si non trouvée. Si vous ne pouvez pas trouver une référence dans votre répertoire <code>refs</code>, elle est probablement dans votre fichier <code>packed-refs</code>.</p> </div> <div class="paragraph"> <p>Remarquez la dernière ligne du fichier, celle commençant par <code>^</code>. Cela signifie que l’étiquette directement au-dessus est une étiquette annotée et que cette ligne est le <em>commit</em> que l’étiquette annotée référence.</p> </div> </div> <div class="sect3"> <h3 id="s_data_recovery">Récupération de données</h3> <div class="paragraph"> <p>À un moment quelconque de votre vie avec Git, vous pouvez accidentellement perdre un <em>commit</em>. Généralement, cela arrive parce que vous avez forcé la suppression d’une branche contenant du travail et il se trouve que vous vouliez cette branche finalement ; ou vous avez réinitialisé une branche avec suppression, en abandonnant des <em>commits</em> dont vous vouliez des informations. Supposons que cela arrive, comment pouvez-vous récupérer vos <em>commits</em> ?</p> </div> <div class="paragraph"> <p>Voici un exemple qui réinitialise la branche <code>master</code> avec suppression dans votre dépôt de test vers un ancien <em>commit</em> et qui récupère les <em>commits</em> perdus. Premièrement, vérifions dans quel état est votre dépôt en ce moment :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git log --pretty=oneline ab1afef80fac8e34258ff41fc1b867c702daa24b modified repo a bit 484a59275031909e19aadb7c92262719cfcdf19a added repo.rb 1a410efbd13591db07496601ebc7a059dd55cfe9 third commit cac0cab538b970a37ea1e769cbbde608743bc96d second commit fdf4fc3344e67ab068f836878b6c4951e3b15f3d first commit</code></pre> </div> </div> <div class="paragraph"> <p>Maintenant, déplaçons la branche <code>master</code> vers le <em>commit</em> du milieu :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git reset --hard 1a410efbd13591db07496601ebc7a059dd55cfe9 HEAD is now at 1a410ef third commit $ git log --pretty=oneline 1a410efbd13591db07496601ebc7a059dd55cfe9 third commit cac0cab538b970a37ea1e769cbbde608743bc96d second commit fdf4fc3344e67ab068f836878b6c4951e3b15f3d first commit</code></pre> </div> </div> <div class="paragraph"> <p>Vous avez effectivement perdu les deux <em>commits</em> du haut, vous n’avez pas de branche depuis laquelle ces <em>commits</em> seraient accessibles. Vous avez besoin de trouver le SHA du dernier <em>commit</em> et d’ajouter une branche s’y référant. Le problème est de trouver ce SHA, ce n’est pas comme si vous l’aviez mémorisé, hein ?</p> </div> <div class="paragraph"> <p>Souvent, la manière la plus rapide est d’utiliser l’outil <code>git reflog</code>. Pendant que vous travaillez, Git enregistre l’emplacement de votre HEAD chaque fois que vous le changez. À chaque <em>commit</em> ou commutation de branche, le journal des références (<em>reflog</em>) est mis à jour. Le journal des références est aussi mis à jour par la commande <code>git update-ref</code>, ce qui est une autre raison de l’utiliser plutôt que de simplement écrire votre valeur SHA dans vos fichiers de références, comme mentionné dans la section <a href="/book/fr/v2/ch00/s_git_refs">Références Git</a> plus haut dans ce chapitre. Vous pouvez voir où vous étiez à n’importe quel moment en exécutant <code>git reflog</code> :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git reflog 1a410ef HEAD@{0}: reset: moving to 1a410ef ab1afef HEAD@{1}: commit: modified repo.rb a bit 484a592 HEAD@{2}: commit: added repo.rb</code></pre> </div> </div> <div class="paragraph"> <p>Ici, nous pouvons voir deux <em>commits</em> que nous avons récupérés, cependant, il n’y a pas plus d’information ici. Pour voir, les mêmes informations d’une manière plus utile, nous pouvons exécuter <code>git log -g</code>, qui nous donnera une sortie normalisée pour votre journal de références :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git log -g commit 1a410efbd13591db07496601ebc7a059dd55cfe9 Reflog: HEAD@{0} (Scott Chacon &lt;schacon@gmail.com&gt;) Reflog message: updating HEAD Author: Scott Chacon &lt;schacon@gmail.com&gt; Date: Fri May 22 18:22:37 2009 -0700 third commit commit ab1afef80fac8e34258ff41fc1b867c702daa24b Reflog: HEAD@{1} (Scott Chacon &lt;schacon@gmail.com&gt;) Reflog message: updating HEAD Author: Scott Chacon &lt;schacon@gmail.com&gt; Date: Fri May 22 18:15:24 2009 -0700 modified repo.rb a bit</code></pre> </div> </div> <div class="paragraph"> <p>On dirait que le <em>commit</em> du bas est celui que vous avez perdu, vous pouvez donc le récupérer en créant une nouvelle branche sur ce <em>commit</em>. Par exemple, vous créez une branche nommée <code>recover-branch</code> sur ce <em>commit</em> (ab1afef):</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git branch recover-branch ab1afef $ git log --pretty=oneline recover-branch ab1afef80fac8e34258ff41fc1b867c702daa24b modified repo a bit 484a59275031909e19aadb7c92262719cfcdf19a added repo.rb 1a410efbd13591db07496601ebc7a059dd55cfe9 third commit cac0cab538b970a37ea1e769cbbde608743bc96d second commit fdf4fc3344e67ab068f836878b6c4951e3b15f3d first commit</code></pre> </div> </div> <div class="paragraph"> <p>Cool. Maintenant vous avez une nouvelle branche appelée <code>recover-branch</code> à l’emplacement où votre branche <code>master</code> se trouvait, rendant les deux premiers <em>commits</em> à nouveau accessibles. Pour poursuivre, nous supposerons que vos pertes ne sont pas dans le journal des références pour une raison quelconque. On peut simuler cela en supprimant <code>recover-branch</code> et le journal des références. Maintenant, les deux premiers <em>commits</em> ne sont plus accessibles :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git branch -D recover-branch $ rm -Rf .git/logs/</code></pre> </div> </div> <div class="paragraph"> <p>Comme les données du journal de référence sont sauvegardées dans le répertoire <code>.git/logs/</code>, vous n’avez effectivement plus de journal de références. Comment pouvez-vous récupérer ces <em>commits</em> maintenant ? Une manière de faire est d’utiliser l’outil <code>git fsck</code>, qui vérifie l’intégrité de votre base de données. Si vous l’exécutez avec l’option <code>--full</code>, il vous montre tous les objets qui ne sont pas référencés par d’autres objets :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git fsck --full Checking object directories: 100% (256/256), done. Checking objects: 100% (18/18), done. dangling blob d670460b4b4aece5915caf5c68d12f560a9fe3e4 dangling commit ab1afef80fac8e34258ff41fc1b867c702daa24b dangling tree aea790b9a58f6cf6f2804eeac9f0abbe9631e4c9 dangling blob 7108f7ecb345ee9d0084193f147cdad4d2998293</code></pre> </div> </div> <div class="paragraph"> <p>Dans ce cas, vous pouvez voir votre <em>commit</em> manquant après « dangling commit ». Vous pouvez le restaurer de la même manière que précédemment, en créant une branche qui référence cette empreinte SHA-1.</p> </div> </div> <div class="sect3"> <h3 id="s_removing_objects">Suppression d’objets</h3> <div class="paragraph"> <p>Il y a beaucoup de choses dans Git qui sont géniales, mais une fonctionnalité qui peut poser problème est le fait que <code>git clone</code> télécharge l’historique entier du projet, incluant chaque version de chaque fichier. C’est très bien lorsque le tout est du code source, parce que Git est hautement optimisé pour compresser les données efficacement. Cependant, si quelqu’un à un moment donné de l’historique de votre projet a ajouté un énorme fichier, chaque clone sera forcé de télécharger cet énorme fichier, même s’il a été supprimé du projet dans le <em>commit</em> suivant. Puisqu’il est accessible depuis l’historique, il sera toujours là.</p> </div> <div class="paragraph"> <p>Cela peut être un énorme problème, lorsque vous convertissez un dépôt Subversion ou Perforce en un dépôt Git. Comme vous ne téléchargez pas l’historique entier dans ces systèmes, ce genre d’ajout n’a que peu de conséquences. Si vous avez importé depuis un autre système ou que votre dépôt est beaucoup plus gros que ce qu’il devrait être, voici comment vous pouvez trouver et supprimer des gros objets.</p> </div> <div class="paragraph"> <p><strong>Soyez prévenu : cette technique détruit votre historique de <em>commit</em>.</strong> Elle réécrit chaque objet <em>commit</em> depuis le premier objet arbre que vous modifiez pour supprimer une référence d’un gros fichier. Si vous faites cela immédiatement après un import, avant que quiconque n’ait eu le temps de commencer à travailler sur ce <em>commit</em>, tout va bien. Sinon, vous devez alerter tous les contributeurs qu’ils doivent rebaser leur travail sur vos nouveaux <em>commits</em>.</p> </div> <div class="paragraph"> <p>Pour la démonstration, nous allons ajouter un gros fichier dans votre dépôt de test, le supprimer dans le <em>commit</em> suivant, le trouver et le supprimer de manière permanente du dépôt. Premièrement, ajoutons un gros objet à votre historique :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ curl https://www.kernel.org/pub/software/scm/git/git-2.1.0.tar.gz &gt; git.tgz $ git add git.tgz $ git commit -m 'add git tarball' [master 7b30847] add git tarball 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 git.tgz</code></pre> </div> </div> <div class="paragraph"> <p>Oups, vous ne vouliez pas ajouter une énorme archive à votre projet. Il vaut mieux s’en débarrasser :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git rm git.tgz rm 'git.tgz' $ git commit -m 'oops - removed large tarball' [master dadf725] oops - removed large tarball 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 git.tgz</code></pre> </div> </div> <div class="paragraph"> <p>Maintenant, faites un <code>gc</code> sur votre base de données, pour voir combien d’espace disque vous utilisez :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git gc Counting objects: 17, done. Delta compression using up to 8 threads. Compressing objects: 100% (13/13), done. Writing objects: 100% (17/17), done. Total 17 (delta 1), reused 10 (delta 0)</code></pre> </div> </div> <div class="paragraph"> <p>Vous pouvez exécuter la commande <code>count-objects</code> pour voir rapidement combien d’espace disque vous utilisez :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git count-objects -v count: 7 size: 32 in-pack: 17 packs: 1 size-pack: 4868 prune-packable: 0 garbage: 0 size-garbage: 0</code></pre> </div> </div> <div class="paragraph"> <p>L’entrée <code>size-pack</code> est la taille de vos fichiers groupés en kilo-octet, vous utilisez donc presque 5 Mo. Avant votre dernier <em>commit</em>, vous utilisiez environ 2 ko ; clairement, supprimer le fichier avec le <em>commit</em> précédent ne l’a pas enlevé de votre historique. À chaque fois que quelqu’un clonera votre dépôt, il aura à cloner les 5 Mo pour récupérer votre tout petit projet, parce que vous avez accidentellement rajouté un gros fichier. Débarrassons-nous en.</p> </div> <div class="paragraph"> <p>Premièrement, vous devez le trouver. Dans ce cas, vous savez déjà de quel fichier il s’agit. Mais supposons que vous ne le sachiez pas, comment identifieriez-vous quel(s) fichier(s) prennent trop de place ? Si vous exécutez <code>git gc</code>, tous les objets sont dans des fichiers groupés ; vous pouvez identifier les gros objets en utilisant une autre commande de plomberie appelée <code>git verify-pack</code> et en triant sur le troisième champ de la sortie qui est la taille des fichiers. Vous pouvez également le faire suivre à la commande <code>tail</code> car vous ne vous intéressez qu’aux fichiers les plus gros :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git verify-pack -v .git/objects/pack/pack-29…69.idx \ | sort -k 3 -n \ | tail -3 dadf7258d699da2c8d89b09ef6670edb7d5f91b4 commit 229 159 12 033b4468fa6b2a9547a70d88d1bbe8bf3f9ed0d5 blob 22044 5792 4977696 82c99a3e86bb1267b236a4b6eff7868d97489af1 blob 4975916 4976258 1438</code></pre> </div> </div> <div class="paragraph"> <p>Le gros objet est à la fin : 5 Mio. Pour trouver quel fichier c’est, vous allez utiliser la commande <code>rev-list</code>, que vous avez utilisée brièvement dans <a href="/book/fr/v2/ch00/s_enforcing_commit_message_format">Application d’une politique de format du message de validation</a>. Si vous mettez l’option <code>--objects</code> à <code>rev-list</code>, elle listera tous les SHA des <em>commits</em> et des blobs avec le chemin du fichier associé. Vous pouvez utiliser cette commande pour trouver le nom de votre blob :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git rev-list --objects --all | grep 82c99a3 82c99a3e86bb1267b236a4b6eff7868d97489af1 git.tgz</code></pre> </div> </div> <div class="paragraph"> <p>Maintenant, vous voulez supprimer ce fichier de toutes les arborescences passées. Vous pouvez facilement voir quels <em>commits</em> ont modifié ce fichier :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git log --oneline --branches -- git.tgz dadf725 oops - removed large tarball 7b30847 add git tarball</code></pre> </div> </div> <div class="paragraph"> <p>Vous devez réécrire tous les <em>commits</em> en descendant depuis <code>7b30847</code> pour supprimer totalement ce fichier de votre historique Git. Pour cela, utilisez <code>filter-branch</code>, que vous avez utilisée dans le chapitre <a href="/book/fr/v2/ch00/s_rewriting_history">Réécrire l’historique</a> :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git filter-branch --index-filter \ 'git rm --ignore-unmatch --cached git.tgz' -- 7b30847^.. Rewrite 7b30847d080183a1ab7d18fb202473b3096e9f34 (1/2)rm 'git.tgz' Rewrite dadf7258d699da2c8d89b09ef6670edb7d5f91b4 (2/2) Ref 'refs/heads/master' was rewritten</code></pre> </div> </div> <div class="paragraph"> <p>L’option <code>--index-filter</code> est similaire à l’option <code>--tree-filter</code> utilisée dans le chapitre <a href="/book/fr/v2/ch00/s_rewriting_history">Réécrire l’historique</a>, sauf qu’au lieu de modifier les fichiers sur le disque, vous modifiez votre index.</p> </div> <div class="paragraph"> <p>Plutôt que de supprimer un fichier spécifique avec une commande comme <code>rm file</code>, vous devez le supprimer avec <code>git rm --cached</code> ; vous devez le supprimer de l’index, pas du disque. La raison de faire cela de cette manière est la rapidité, car Git n’ayant pas besoin de récupérer chaque révision sur disque avant votre filtre, la procédure peut être beaucoup, beaucoup plus rapide. Vous pouvez faire la même chose avec <code>--tree-filter</code> si vous voulez. L’option <code>--ignore-unmatch</code> de <code>git rm</code> lui dit que ce n’est pas une erreur si le motif que vous voulez supprimer n’existe pas. Finalement, vous demandez à <code>filter-branch</code> de réécrire votre historique seulement depuis le parent du <em>commit</em> <code>7b30847</code>, car vous savez que c’est de là que le problème a commencé. Sinon, il aurait démarré du début et serait plus long inutilement.</p> </div> <div class="paragraph"> <p>Votre historique ne contient plus de référence à ce fichier. Cependant, votre journal de révision et un nouvel ensemble de références que Git a ajouté lors de votre <code>filter-branch</code> dans <code>.git/refs/original</code> en contiennent encore, vous devez donc les supprimer puis regrouper votre base de données. Vous devez vous débarrasser de tout ce qui fait référence à ces vieux <em>commits</em> avant de regrouper :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ rm -Rf .git/refs/original $ rm -Rf .git/logs/ $ git gc Counting objects: 15, done. Delta compression using up to 8 threads. Compressing objects: 100% (11/11), done. Writing objects: 100% (15/15), done. Total 15 (delta 1), reused 12 (delta 0)</code></pre> </div> </div> <div class="paragraph"> <p>Voyons combien d’espace vous avez récupéré :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git count-objects -v count: 11 size: 4904 in-pack: 15 packs: 1 size-pack: 8 prune-packable: 0 garbage: 0 size-garbage: 0</code></pre> </div> </div> <div class="paragraph"> <p>La taille du dépôt regroupé est retombée à 8 ko, ce qui est beaucoup mieux que 5 Mo. Vous pouvez voir dans la valeur « size » que votre gros objet est toujours dans vos objets bruts, il n’est donc pas parti ; mais il ne sera plus transféré lors d’une poussée vers un serveur ou un clone, ce qui est l’important dans l’histoire. Si vous le voulez réellement, vous pouvez supprimer complètement l’objet en exécutant <code>git prune</code> avec l’option <code>--expire</code> :</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-console" data-lang="console">$ git prune --expire now $ git count-objects -v count: 0 size: 0 in-pack: 15 packs: 1 size-pack: 8 prune-packable: 0 garbage: 0 size-garbage: 0</code></pre> </div> </div> </div> <div id="nav"><a href="/book/fr/v2/Les-tripes-de-Git-Les-protocoles-de-transfert">prev</a> | <a href="/book/fr/v2/Les-tripes-de-Git-Les-variables-d’environnement">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>

Pages: 1 2 3 4 5 6 7 8 9 10