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

Por qué el índice es lento

Incluso con sparse checkout, el índice por defecto contiene una entrada por archivo en todo el repo — un millón de entradas en un monorepo, incluso si solo mil están presentes en el árbol de trabajo. El sparse index (Git 2.37+) reemplaza directorios excluidos con una sola entrada de tree.

Habilitación

git sparse-checkout init --cone --sparse-index
git config index.sparse true
git update-index --sparse

Cómo funciona

Cada directorio excluido se representa en el índice como una entrada de modo 040000 (tree) con el SHA de su tree commiteado.

Inspección

git ls-files --sparse | head
git ls-files -t | grep ^S | head
GIT_TRACE2_PERF=1 git status 2>&1 | grep sparse

Números de rendimiento

En un monorepo del mundo real con 4M de archivos, el equipo de Microsoft Office reportó git status bajando de 3 segundos a menos de 200ms. El tamaño del archivo de índice bajó de 350MB a 5MB.

Compatibilidad

Muchos comandos son sparse-aware: status, add, commit, diff, checkout, reset, restore, stash, ls-files.

Forzar expansión

git update-index --no-sparse
git update-index --sparse

Errores comunes

Intentar habilitar el sparse index en modo sparse-checkout no-cono — rechazado.