objectif
Rendre git blame pertinent en excluant les commits bruyants (formatage massif, reformatters, vendoring) grâce au fichier .git-blame-ignore-revs, local et compris par les forges.
code minimal
# activer le fichier d'ignore pour blame dans le dépôt courant
echo "abc1234deadbeef..." >> .git-blame-ignore-revs
git config blame.ignoreRevsFile .git-blame-ignore-revs
# utiliser
git blame chemin/fichier.ts
utilisation
# 1) lister les commits de formatage à ignorer (ex: messages contenant 'prettier' ou 'clang-format')
git log --grep='prettier\|clang-format\|reformat\|whitespace' --pretty=%H >> .git-blame-ignore-revs
# 2) activer pour le repo (fichier suivable en VCS)
git config blame.ignoreRevsFile .git-blame-ignore-revs
git add .git-blame-ignore-revs
git commit -m "chore: configure .git-blame-ignore-revs"
# 3) vérifier l'effet (avant/après)
git blame chemin/fichier.ts # bruité
git blame chemin/fichier.ts | head -n 5 # aperçu
# avec l'ignore activé, les lignes issues de ces commits sont attribuées aux auteurs précédents
# 4) usage ponctuel sans config (CI/scripts)
git blame --ignore-revs-file .git-blame-ignore-revs chemin/fichier.ts
# 5) ignorer aussi les commits de vendoring (ex: 'vendor: ' dans le message)
git log --grep='^vendor:' --pretty=%H >> .git-blame-ignore-revs
variante(s) utile(s)
# générer la liste à partir d'un range connu (ex: batch de refactor entre deux tags)
git rev-list v2.0.0..v2.1.0 --grep='reformat\|lint\|prettier' >> .git-blame-ignore-revs
# ignorer un commit whitespace-only détecté automatiquement
git rev-list --all --no-merges | while read c; do
if git show --pretty= --unified=0 -w "$c" | grep -q .; then :; else echo "$c"; fi
done >> .git-blame-ignore-revs
# (heuristique: un diff vide avec -w => probablement whitespace-only)
# config globale pour tous vos dépôts (utilisateur)
# attention: mettez un chemin absolu vers un fichier géré par vous
echo "# refs de formatage globaux" >> ~/._blame_ignore_revs
git config --global blame.ignoreRevsFile "$HOME/._blame_ignore_revs"
# ensuite, par dépôt, vous pouvez compléter le fichier local .git-blame-ignore-revs si besoin
# forges: certaines UIs (ex: git.data.pm) respectent .git-blame-ignore-revs
# poussez le fichier à la racine du dépôt pour en profiter côté web
notes
.git-blame-ignore-revscontient une liste de SHA (un par ligne), optionnellement commentés avec#.- l’option
blame.ignoreRevsFilefonctionne avec Git ≥ 2.23. La plupart des forges modernes lisent ce fichier en UI. - privilégiez des critères explicites pour peupler la liste (messages de commit, tags de refactor, vendoring).
- évitez d’ignorer des commits qui changent la logique; réservez-le aux modifications non fonctionnelles (formatage, renommages mécaniques, import de vendor).