Da Anonimo (non verificato) , 29 Aprile 2026

Il collo di bottiglia della raggiungibilita

Molte operazioni Git devono rispondere a "il commit X e raggiungibile da Y?" o "qual e la merge-base?". Il file commit-graph precalcola puntatori ai genitori, numeri di generazione, e (opzionalmente) Bloom filter in un file binario laterale.

Dove vive

Git vecchio: .git/objects/info/commit-graph. Git nuovo: .git/objects/info/commit-graphs/ (concatenati, scrivibili incrementalmente).

Scrivere il grafo

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

Auto-write

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

Numeri di generazione

Ogni commit ottiene un numero di generazione topologica. La "data corretta del commit" (Git 2.30+) accelera ulteriormente le query.

Impatto sulle performance

Sul repo Linux (oltre un milione di commit), git log --oneline | head scende da secondi a millisecondi.

Misurazione

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

Errori comuni

Dimenticare di scrivere il grafo dopo un grande push o rebase.