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

Le goulot d'atteignabilité

De nombreuses opérations Git doivent répondre "le commit X est-il atteignable depuis Y ?" ou "quelle est la base de merge ?" Naïvement cela signifie parcourir le graphe de commits depuis des lectures brutes d'objets — lent sur les gros repos. Le fichier commit-graph précalcule les pointeurs parents, les numéros de génération et (optionnellement) les filtres Bloom.

Où il vit

Git ancien : .git/objects/info/commit-graph. Git moderne : .git/objects/info/commit-graphs/.

Écrire le graphe

git commit-graph write --reachable --changed-paths
git commit-graph verify
git commit-graph write --split=replace --reachable --changed-paths

Auto-écriture

git config core.commitGraph true
git config gc.writeCommitGraph true
git config fetch.writeCommitGraph true

Numéros de génération

Chaque commit reçoit un numéro topologique de génération.

Impact sur la performance

Sur le repo Linux (plus d'un million de commits), git log --oneline | head passe de secondes à millisecondes.

Mesure

git -c core.commitGraph=false log -100 --pretty=oneline >/dev/null
time git -c core.commitGraph=false log --oneline | head -10000 >/dev/null
time git log --oneline | head -10000 >/dev/null

Erreurs courantes

Oublier d'écrire le graphe après un gros push ou rebase.