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 blamesu 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.