Par Anonyme (non vérifié) , 29 avril 2026

Le problème du log restreint par chemin

git log -- path/to/file doit en principe parcourir chaque commit, faire un diff par rapport à son parent et émettre ceux qui ont touché path/to/file. Sur les gros repos cela est dominé par les comparaisons de tree. Les filtres Bloom de chemins changés (Git 2.27+) accélèrent dramatiquement.

Comment fonctionnent les filtres Bloom

Un filtre Bloom est un petit bitmap qui retourne "définitivement pas dans l'ensemble" ou "probablement dans l'ensemble". Les faux positifs sont possibles mais jamais de faux négatifs.

Activation

git commit-graph write --reachable --changed-paths
git config commitGraph.changedPathsVersion 2
git maintenance run --task=commit-graph

Vérifier

GIT_TRACE2_PERF=1 git log -- src/foo.c 2>&1 | grep -i bloom
git commit-graph verify

Quand ça brille

  • Monorepo de longue durée avec beaucoup de commits qui ne touchent que peu de fichiers chacun.
  • Requêtes git log -- src/specific/dir.
  • git blame sur fichiers individuels.

Quand ça n'aide pas

  • Chemins glob/regex que le filtre ne peut pas matcher exactement.
  • Logs sans argument de chemin --.
  • Très petits repos.

Mémoire et disque

git config commitGraph.maxNewFilters 50000

Erreurs courantes

Écrire le graphe sans --changed-paths — les filtres ne sont pas ajoutés par défaut.