El problema del log restringido por ruta
git log -- path/to/file debe, en principio, recorrer cada commit, hacer diff contra su padre, y emitir los que tocaron path/to/file. En repos grandes esto está dominado por comparaciones de tree. Los filtros Bloom de rutas cambiadas (Git 2.27+) aceleran esto dramáticamente almacenando, para cada commit, un conjunto probabilístico de rutas que tocó.
Cómo funcionan los filtros Bloom
Un filtro Bloom es un pequeño bitmap que devuelve "definitivamente no en el conjunto" o "probablemente en el conjunto". Los falsos positivos son posibles pero nunca falsos negativos.
Habilitación
git commit-graph write --reachable --changed-paths
git config commitGraph.changedPathsVersion 2
git maintenance run --task=commit-graph
Verificar
GIT_TRACE2_PERF=1 git log -- src/foo.c 2>&1 | grep -i bloom
git commit-graph verify
Cuándo brilla
- Monorepo de larga vida con muchos commits que tocan pocos archivos cada uno.
- Consultas
git log -- src/specific/dir. git blameen archivos individuales.
Cuándo no ayuda
- Rutas con glob/regex que el filtro no puede emparejar exactamente.
- Logs sin un argumento de ruta
--. - Repos muy pequeños donde el recorrido ya es rápido.
Memoria y disco
Los filtros añaden aproximadamente 8-12 bytes por commit al archivo commit-graph.
git config commitGraph.maxNewFilters 50000
Errores comunes
Escribir el grafo sin --changed-paths — los filtros no se añaden por defecto.