Pourquoi filter-repo
git filter-repo est le remplaçant moderne du déprécié git filter-branch. Il est dramatiquement plus rapide — parfois 100x — plus sûr par défaut, et fournit les opérations de haut niveau dont la chirurgie d'historique a vraiment besoin : supprimer des fichiers, renommer des chemins, retirer des auteurs, diviser des sous-répertoires et changer les emails sur tous les commits.
Installation
filter-repo n'est pas livré avec Git mais est largement empaqueté. Sur macOS : brew install git-filter-repo. Sur Debian/Ubuntu : apt install git-filter-repo.
Supprimer un fichier de toute l'histoire
git filter-repo --path secrets.env --invert-paths
Extraire un sous-répertoire en nouveau repo
git clone --no-local original/ extracted/
cd extracted
git filter-repo --subdirectory-filter packages/foo
Renommer des chemins
git filter-repo --path-rename old/dir/:new/dir/
Mettre à jour les emails d'auteur
cat > mailmap.txt <<'EOF'
Jane Doe <[email protected]> <[email protected]>
EOF
git filter-repo --mailmap mailmap.txt
Caractéristiques de sécurité
git filter-repo --force
Erreurs courantes
Exécuter sur votre seul clone avec --force et sans backup. Toujours cloner d'abord. Oublier que filter-repo supprime le remote d'origine pour empêcher les pushes accidentels.
Performance
filter-repo streame via git fast-export/fast-import.