Por Anónimo (no verificado) , 29 Abril 2026

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 blame en 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.