Nettoyer un dépôt Git
17 mars 2016
Pour diverses raisons (erreurs, mauvaise gestion, …), il arrive qu’un dépôt git prenne une taille démesurée, ce qui peut vite devenir handicapant. Il devient donc parfois nécessaire de faire un peu de ménage et retirer complètement certains fichiers du dépôt peut être une solution efficace.
Attention, lorsqu’on dit ici retirer un fichier du dépôt, il ne s’agit pas de simplement faire un commit le supprimant (ce qui ne changerait en rien la taille du dépôt), mais de modifier l’historique complet des commits pour faire en sorte de l’en retirer complètement. Cette ré-écriture complète de l’historique rendra le dépôt incompatible avec tout autre clone du même projet.
Cette solution peu également permettre de retirer d’un projet des fichiers contenant des données sensibles ou confidentielles.
À partir d’un dépôt local, à jour :
- Retirer tous les remotes
git remote rm origin- Supprimer toutes les références du fichier à effacer :
git filter-branch --index-filter 'git rm --cached --ignore-unmatch fichier_a_effacer.zip -- --all'filter-branchest la commande permettant de ré-écrire la branche courante.--index-filterpermet d’accélérer le traitement en traitant l’index au lieu des fichiers du disque.
rmsupprime.--cachedmodifie l’index et la zone d’attente au lieu des fichiers du disque.--ignore-unmatchpermet de ne pas générer d’erreur si la référence à supprimer n’existe pas.-- --allpermet d’agir sur toutes les branches.
- La commande
filter-branchgénère automatiquement une sauvegarde qu’il nous faut supprimer pour réellement alléger le dépôt (Attention, à partir d’ici on est réellement destructif, pas de retour en arrière possible) :
rm -rf .git/refs/original/
rm -rf .git/logs/- Pour terminer, le garbage collector va supprimer tous les objets qui ne sont plus référencés :
git gc --aggressive --prune=now--aggressiveoptimise plus profondément le dépôt.--prune=nowsupprime tous les objets inutilisés immédiatement (par défaut,--prunesupprime uniquement les objets inutilisés depuis plus de deux semaines).
Pour une version plus détaillée, vous pouvez vous référer à la version française du livre Pro Git accessible librement en ligne.