Von Gast (nicht überprüft) , 29 April 2026

Der Erreichbarkeits-Engpass

Viele Git-Operationen mussen "ist Commit X von Y aus erreichbar?" oder "welcher Commit ist die Merge-Basis?" beantworten. Die Commit-Graph-Datei berechnet Eltern-Zeiger, Generations-Nummern und (optional) Bloom-Filter in einer binaren Seitendatei vor.

Wo sie lebt

Alteres Git: .git/objects/info/commit-graph. Neueres Git: .git/objects/info/commit-graphs/ (verkettet).

Den Graphen schreiben

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

Auto-Schreiben

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

Generations-Nummern

Jeder Commit erhalt eine topologische Generations-Nummer.

Performance-Auswirkung

Im Linux-Repo (uber eine Million Commits) sinkt git log --oneline | head von Sekunden auf Millisekunden.

Messung

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

Haufige Fehler

Vergessen, den Graphen nach einem grossen Push oder Rebase zu schreiben.