¿Por qué Git señala falsamente que mis archivos están actualizados?

¿Por qué Git señala falsamente que mis archivos están actualizados?

Tengo dos carpetas (A y B) en mi directorio de archivos que enlazan con el mismo repositorio de Git.

Creé un archivo en la carpeta A llamado index.html. Luego creo un archivo diferente también llamado index.htmlen la carpeta B. Luego agrego index.htmlen la carpeta B, comprometo y envío el contenido de B.

Cuando salgo de la carpeta A, Git afirma que mis archivos "ya están actualizados". Sin embargo, ambas carpetas claramente tienen index.htmlarchivos diferentes. ¿Qué está pasando?

Respuesta1

git pullEl trabajo de es realizar fetchnuevas confirmaciones y mergecolocarlas en la rama actual. Si la rama actual no está desactualizada en comparación con la que extrae, pull diráAlready up-to-date. incluso si tiene cambios locales en su directorio de trabajo. git pullse ocupa de las ramas, no del árbol de trabajo; comentará sobre el árbol de trabajo sólo si hay cambios que interfieran con la fusión.

Su descripción es insuficiente para explicar por qué no se opone a lo existente index.html, pero no debe entender que Already up-to-date.git cree que no tiene cambios. En su lugar, utilícelo git statuspara obtener un resumen.

Para comprender el estado de sus ramas, git branch -ves útil (muestra el ID de confirmación y la relación con la rama ascendente de cada rama), o gitk --allpara una vista gráfica de todas las confirmaciones.

Respuesta2

Si entiendo correctamente, el siguiente script debería reproducir su problema:

prueba mkdir
prueba de CD
git init --prueba desnuda.git
prueba de clonación de git.git a
prueba de clonación de git.git b
eco a > a/index.html
eco b > b/index.html
cdb
git agregar index.html
git confirmar -m agregar
maestro de origen de git push
cd../a
git tirar

Las últimas git pullimpresiones:

remoto: Contando objetos: 3, listo.
remoto: Total 3 (delta 0), reutilizado 0 (delta 0)
Desembalaje de objetos: 100% (3/3), hecho.
Desde /home/cyrus/tmp/test/test
 * [nueva rama] master -> origen/master

Y el contenido de index.htmlha sido sobrescrito silenciosamente:

ciro:~/tmp/test/a$ cat index.html
b

Respuesta3

Recuerda una cosa sobre git...rastrea contenido, no archivos.

Internamente, todo el contenido que guarda el repositorio es ungotaen algún lugar. Lo que usted considera un archivo, gitse considera un nombre que apunta a un blob. Lo que usted considera dos archivos con el mismo contenido, gitse considera dos nombres vinculados al mismo blob. Entonces, dado que ninguno de los blobs ha cambiado, el repositorio no ha cambiado.

Espera que git funcione como lo hace su sistema de archivos (o tal vez como lo hacen la mayoría de los otros sistemas de control de versiones); giten realidad, es más eficiente en cuanto a espacio en este sentido.El libroexplica este concepto bastante bien - específicamente, elModelo de objetos Git.

Respuesta4

Parece que está acostumbrado a SVN, donde se pueden extraer diferentes carpetas (o incluso archivos, no lo sé) de diferentes revisiones.

Esto no es posible con git. Independientemente de la carpeta en la que se encuentre en una confirmación o extracción (que también es el paso final de una extracción exitosa), actúe en todos los archivos de trabajo independientemente de la carpeta en la que se encuentre actualmente.

información relacionada