Esto es sobre las partes internas de git
.¿Qué algoritmo usa git para detectar cambios en su árbol de trabajo?
He estado leyendo el gran libro 'Pro Git' y aprendiendo un poco sobre cómo funciona git internamente (todo sobre SHA1, blobs, referencias, tress, commits, etc., etc.). Arquitectura bastante inteligente, por cierto.
Por lo tanto, para ponerlo en contexto, git hace referencia al contenido de un archivo como un valor SHA1, por lo que es capaz de saber si un contenido específico ha cambiado simplemente comparando los valores hash. Pero mi pregunta es específicamente sobre cómo git comprueba que el contenido en el árbol de trabajo ha cambiado o no.
El enfoque ingenuo será pensar que, cada vez que ejecute un comando como git status
o un comando similar, buscará todos los archivos en el directorio de trabajo, calculando el SHA1 y comparándolo con el que tiene el último compromiso . Pero eso parece muy ineficiente para grandes proyectos, como el kernel de Linux.
Otra idea podría ser para comprobar la última fecha de modificación en el archivo, pero creo que git no es el almacenamiento de la información (al clonar un repositorio, todos los archivos tienen un nuevo tiempo)
Estoy seguro de que es hacerlo de manera eficiente (git es realmente rápido), ¿cómo se logra eso?
PD: Solo para agregar un interesante link sobre el índice git, indicando específicamente que el índice mantiene información sobre las marcas de tiempo de los archivos, incluso cuando los objetos del árbol no lo hacen.
Ver: http://stackoverflow.com/questions/1778862/how-does-git-detect-a-file-modification –
[¿Cómo detecta git que un archivo ha sido modificado?] (Http: // stackoverflow .com/q/1778862/995714) –