El archivo de índice no sólo debe cambiar aleatoriamente. Ese es el árbol de etapas, un buffer entre el repositorio de commits y el árbol de trabajo. Para mayor eficiencia, también almacena algunos metadatos sobre el árbol de trabajo (los archivos desprotegidos que puede modificar), que permitirían resultados más rápidos status
o diff
. Para ver qué tipo de información se almacena, intente ejecutar git ls-files --debug
. Esto debería imprimir, para cada archivo y directorio, algo así como:
path/to/file
ctime: 1332898839:873326227
mtime: 1332898839:873326227
dev: 2052 ino: 4356685
uid: 1000 gid: 100
size: 3065 flags: 6c
lo tanto, si un archivo cambia de ninguna manera en el disco, no como su contenido, pero cosas internas como la que INODE que está usando, se disparará una actualización del archivo index
la próxima vez que se use el índice.
git branch
no actualiza el índice, ya que sólo se comprueba el archivo .git/HEAD
y los archivos .git/refs/heads
y .git/packed-refs
, que no se preocupa por el índice o el árbol de trabajo. git diff
y git status
, por otro lado, funcionan con el índice.
Hice un experimento: copié el archivo actual index
, creé una nueva versión de un archivo asegurándome de que se le asignaría un nuevo inodo (copiar, eliminar el original, cambiar el nombre de la copia al nombre original) , ejecutó git status
, y luego comparó el nuevo archivo de índice con la copia original. Dos cosas cambiaron: una línea que contenía el archivo afectado, y los cambios estaban en los bytes justo antes del nombre de archivo, y algunos bytes justo al final del archivo de índice, probablemente una marca de tiempo para el último cálculo de índice. El tamaño total del archivo sigue siendo el mismo.
Volver a su problema, si no está ejecutando ningún comando que toque el índice usted mismo, entonces tal vez tenga otra herramienta para usted: un complemento IDE o una extensión de navegador de archivos que conoce repositorios git, y que verifica el estado de los repositorios de git. O bien, hay otro proceso que cambia la forma en que se almacenan los archivos en el disco, como una utilidad de desfragmentación de disco.
El índice se actualiza con información estadística cada vez que un archivo en el directorio de trabajo es inspeccionado por git. Hace que las operaciones posteriores sean más rápidas porque git puede omitir la inspección del contenido de un archivo en muchos casos si no se ha actualizado desde la última operación de git. ¿No puedes excluir tu directorio .git de la sincronización de archivos? –
¿Por qué estás usando 'unison' para sincronizar tu git repo? Eso es un poco extraño. Solo usa 'git' directamente. –
@KevinBallard Estoy usando el unísono para sincronizar un directorio de inicio que contiene cientos de miles de archivos y muchos gigabytes, así como varias docenas de repositorios de git. La mayoría de estos repositorios git no tienen otras réplicas. –