Da Anonimo (non verificato) , 29 Aprile 2026

Il problema del log per percorso

git log -- path/to/file deve, in linea di principio, attraversare ogni commit e differire ognuno dal genitore. I Bloom filter changed-path (Git 2.27+) accelerano memorizzando, per ogni commit, un insieme probabilistico di percorsi toccati.

Come funzionano i Bloom filter

Un Bloom filter e una piccola bitmap che restituisce "sicuramente non nell'insieme" o "probabilmente nell'insieme" per le query di membership.

Abilitare

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

Verifica

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

Quando brilla

  • Monorepo di lunga durata con molti commit che toccano pochi file.
  • Query git log -- src/specific/dir.
  • git blame su file individuali.

Quando non aiuta

  • Pattern glob/regex.
  • Log senza argomento -- path.
  • Repo molto piccoli.

Memoria e disco

git config commitGraph.maxNewFilters 50000

Errori comuni

Scrivere il grafo senza --changed-paths — i filtri non vengono aggiunti per default.