2012-07-16 17 views
8

Tengo mi pequeño repositorio personal de git en mi computadora portátil. Acabo de enviar los cambios y compruebo que no tengo nada que confirmar, ya que se han confirmado todos los archivos montados y modificados.¿Por qué después de copiar el repositorio de git a otro directorio, he modificado los archivos?

Después de eso he copiado todos los archivos de este repositorio a otra ubicación y ¡auge! No he confirmado los cambios.

Creo que me faltan algunas reglas fundamentales de git. ¿Alguien puede sugerirme sobre eso?

+0

¿Pretende que la nueva copia sea también un repositorio git? – bluesman

+1

Debe incluir la información de que el repositorio original estaba en Windows y la copia está en Ubuntu. Eso hace una gran diferencia. Dada esta información, creo que la respuesta de los parrhoyts es correcta. – suvayu

+0

¿'git diff' muestra las diferencias reales? ¿O acabas de ver que 'git status' dice que tienes cambios?Podría encontrarse con el hecho de que el índice almacena algunos metadatos sobre cada archivo: la copia tiene marcas de tiempo diferentes a las originales, por lo que 'git' podría informar que esos archivos ya no coinciden con lo que el índice cree que debería estar allí, aunque los contenidos de los archivos aún pueden ser idénticos. – twalberg

Respuesta

6

Sus archivos en windows probablemente tienen terminaciones de línea de alimentación de línea de retorno de carro y es probable que tenga core.autocrlf verdadero en su caja de Windows. No lo copie así entre diferentes plataformas. En su lugar, cree un nuevo repositorio de git en el cuadro de Linux y extraiga desde el cuadro de Windows. Puede usar git bundle o git daemon en el equipo con Windows para exponer el repositorio. O puede hacer un repositorio simple en el cuadro de Linux y git push --mirror desde la máquina de Windows y luego clonarlo donde desea que termine la versión final.

O bien, es muy probable que ya pueda hacer un git reset --hard HEAD y arreglarlo en el linux box como está. Posiblemente deberías eliminar todo excepto la carpeta .git primero para asegurar un árbol de trabajo completamente limpio.

1

¿Cambian los permisos entre las carpetas? Git registrará el cambio de permisos.

+1

Bueno, no sé exactamente a qué te refieres, pero he copiado archivos de la máquina Win7 a Ubuntu si eso importa. – Patryk

+0

¿Qué permisos de archivos git rastrear? [Esta pregunta] (http://stackoverflow.com/questions/1071241/how-does-git-handle-folder-permission) sugiere que no. ¿De dónde viene tu información? – simont

+0

Hace un seguimiento del bit ejecutable que creo que puede establecerse o desarmarse automáticamente si accede a los sistemas de archivos de Windows desde Ubuntu/linux – leighman

1

La copia de Windows a Linux introduce una diferencia en los derechos de los archivos, git también realiza un seguimiento de estos cambios.

1

Estoy enfrentando el mismo problema. Sin embargo, he copiado archivos del sistema host de Linux a un sistema de invitado de Virtual Box. Algunos enlaces se eliminan, mientras que algunos permisos de archivo se modificaron, lo que pude solucionar haciendo git config core.filemode false.

9

Lo que hice, ejecute

git diff | grep -B 2 @@ | grep +++ 

para obtener los archivos cambiado realmente, a continuación, hacer volver a todos los demás

+0

Funcionó para mí. Muestra los archivos que realmente fueron cambiados. Luego revisa los que están listados a través del estado de git que no aparecen en el git diff –

0

Si no tienen nada en escondite que perder, hacer:

git checkout .

Esto revertirá el árbol de trabajo a su confirmación anterior

0

Si tiene múltiples ramas y todos los cambios presionados, entonces esta solución podría funcionar

Simplemente agregue y confirme todos los cambios que vea a la rama actual (por ejemplo, maestro). Luego revise otra rama (digamos prueba) Elimine la rama maestra localmente (con la opción -D). Tire de la rama principal desde git

¡Hecho ..!

Cuestiones relacionadas