2011-03-24 11 views
6

Hay 2 máquinas, A y B. Y hay 2 ramas, p16 y c2.Git diff informa cambios locales 'old mode'/'new mode'

A tiene un sistema de ficheros ext3, pero en B el archivo reside en una unidad truecrypt con vfat, montaje muestra rw, uid = 1000, gid = 1000, umask = 077

A ha vinculado el árbol de directorios de B en su árbol de directorios usando sshfs y luego A empujó hacia la p16 de B usando el sistema de archivos.

Ahora bien, hay algunos problemas de permisos:

B$ git status 
# On branch p16 
nothing to commit (working directory clean) 
B$ git checkout c2 
Switched to branch 'c2' 
B$ git checkout p16 
error: You have local changes to 'help.txt'; cannot switch branches. 

git diff me muestra un modo modificado para todos los archivos ahora:

B$git diff 
diff --git a/help.txtt b/help.txt 
old mode 100644 
new mode 100755 
diff --git a/169.txt b/169.txt 
old mode 100644 
new mode 100755 
... 
(a list with all files having their mode changed follows) 
... 

Supongo que el problema es que el sistema de archivos local es un truecrypt vfat contenedor y el sistema de archivos no permiten los permisos que la otra máquina espera.

¿Alguna idea de cómo puedo conectar mejor las 2 máquinas con diferentes sistemas de archivos?

+0

Solo una suposición, pero ¿la rama p16 tiene un .gitignore que ignora los archivos con cambios? – coreyward

+0

p16 tiene un gitignore con 2 líneas, vea la pregunta actualizada – mit

+1

¿Está en Windows? Carece de un "x" bit que lleva a mucho dolor como usted describe. –

Respuesta

8

Estos problemas al usar git pueden ocurrir, si los permisos de archivos del sistema operativo no funcionan como deberían en esa ubicación. Por ejemplo, cuando se montan sistemas de archivos extranjeros.

La solución fue señalado por meagar en su comentario sobre la pregunta anterior:

Sólo asegúrese de que usted tiene (dentro de la sección [core]) una línea

filemode=false 

en .git/config, que se Dile a Git que ignore el bit ejecutable de los archivos que está rastreando.

Otra forma de hacer lo mismo sería ir al directorio raíz del repositorio git en el terminal y escriba:

git config core.filemode false 

cuenta que cambiar esta configuración es necesaria en ocasiones, pero por lo demás es mejor para mantener el comportamiento predeterminado En muchos casos, es importante que git rastree los permisos de los archivos correctamente para que su proyecto funcione como debería.

+0

Esto parece peligroso. Esto también está fuera de mi conocimiento. ¿Cuáles son las posibles repercusiones de hacer esto en git? – dudewad

Cuestiones relacionadas