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

El cuello de botella de alcanzabilidad

Muchas operaciones de Git necesitan responder "¿es el commit X alcanzable desde Y?" o "¿cuál es la base de merge?" Ingenuamente esto significa recorrer el grafo de commits desde lecturas crudas de objetos — lento en repos grandes. El archivo commit-graph precomputa punteros de padres, números de generación y (opcionalmente) filtros Bloom en un archivo lateral binario.

Dónde vive

Git antiguo: .git/objects/info/commit-graph. Git nuevo: .git/objects/info/commit-graphs/.

Escribir el grafo

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

Auto-escritura

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

Números de generación

Cada commit obtiene un número topológico de generación. Comparar permite a Git saltar regiones enteras del grafo durante recorridos.

Impacto en rendimiento

En el repo de Linux (más de un millón de commits), git log --oneline | head baja de segundos a milisegundos.

Medición

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

Errores comunes

Olvidar escribir el grafo tras un push grande o rebase. Deshabilitar core.commitGraph sin darse cuenta de que muchas otras características dependen de él.