
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.html
en la carpeta B. Luego agrego index.html
en 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.html
archivos diferentes. ¿Qué está pasando?
Respuesta1
git pull
El trabajo de es realizar fetch
nuevas confirmaciones y merge
colocarlas 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 pull
se 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 status
para obtener un resumen.
Para comprender el estado de sus ramas, git branch -v
es útil (muestra el ID de confirmación y la relación con la rama ascendente de cada rama), o gitk --all
para 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 pull
impresiones:
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.html
ha 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, git
se considera un nombre que apunta a un blob. Lo que usted considera dos archivos con el mismo contenido, git
se 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); git
en 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.