El área de staging, desmitificada
El índice (alias cache, área de staging) vive en .git/index como archivo binario que describe lo que contendrá el próximo commit. No es un tree — es una lista plana ordenada de entradas de ruta con stat info, modo y SHA. Operaciones como git add, git rm y git mv actualizan el índice; git commit lo convierte en un objeto tree.
Inspección
git ls-files --stage
git ls-files --debug
git diff --cached
git diff
Versiones del índice
Git soporta varias versiones. La 2 fue histórica; la 3 añadió skip-worktree (para sparse checkout); la 4 (predeterminada en 2.20+) comprime prefijos de rutas para árboles grandes.
git config index.version 4
git update-index --index-version 4
Caching de stat
El índice registra dispositivo, inode, ctime, mtime, tamaño para cada entrada. git status usa esto para saltar archivos cuyo stat coincide.
Sparse index
git sparse-checkout init --cone
git sparse-checkout set apps/web libs/shared
git config core.sparseCheckoutCone true
git config index.sparse true
Merge de tres vías en el índice
git ls-files -u
git checkout-index --stage=2 -- file
git checkout-index --stage=3 -- file
Errores comunes
Creer que git add stagea archivos "permanentemente" — stagea una instantánea. Re-edita y re-añade.
Palancas de rendimiento
Índices grandes son lentos de leer/escribir. Palancas: index.version=4, core.untrackedCache=true, core.fsmonitor=true, sparse index, y feature.manyFiles=true.