Git no restablecerá los permissions de file sobre cifs mount

Recientemente cambié mi material de progtwigción del almacenamiento local a un almacenamiento en networking. Desde entonces, Git ya no funciona correctamente.

Un escenario típico:
Cambio files Ahora quiero esconder los cambios. Yo hago git stash . Git revoca los cambios. Sin embargo, los files están marcados como cambiados en git status . git diff -p muestra

 diff --git a/file.txt b/file.txt old mode 100644 new mode 100755 

Intenté restablecer los files haciendo

  • git checkout -- file.txt
  • git reset --hard

pero nada funciona. La única forma de volver a tener la copy de trabajo limpia es chmod 644 file.txt .


Los files se encuentran en un NAS de Synology. Estoy montando cifs en mi máquina Linux. noperm con las opciones de assembly noperm , file_mode , dir_mode pero no puedo hacer que funcione.

Leí acerca de git config core.filemode false pero no estoy seguro de si esto es lo que hay que hacer aquí. Tengo miedo de dañar mi repository. ¿Git guarda información de permissions en el repository / índice? ¿Puedo inspeccionar esto de alguna manera? Tal vez ya hice algo mal con mis commits recientes.

No puede usar Git a través de los límites del sistema operativo, y posiblemente sobre Samba / CIFS, punto, porque obliga a la máscara de file a files nuevos y modificados. Vea esta discusión de 2013 en el sitio de Atlassian. Hace un par de años esperaba utilizar Windows SourceTree en un repo de Git en mi server de desarrollo local (instancia de Ubuntu VM en mi sistema local) sobre un map de Samba, pero no fue así. Todavía utilizo la máquina virtual para el server de desarrollo ya que me resulta terriblemente frustrante trabajar en Windows con entornos que no fueron diseñados para ejecutarse en él, sin mencionar que el entorno de producción siempre es Linux. Las herramientas de desarrollo son mucho mejores en Windows, por supuesto, así que esta es la solución "mejor de ambos mundos" para mí (aunque las herramientas de desarrollo en Mac son buenas, OSX tampoco sería 1: 1 en el entorno de producción de Linux) . Así que utilizo un map de Samba y un buen cliente de SSH para todo lo demás excepto las operaciones de escritura de Git y las diferencias visuales de Git (es decir, la reconciliación de conflictos de rebase / fusión) que son imposibles de ejecutar desde Windows por la razón dada. Cuando surge la necesidad de hacer un diff, me cambio a la window de la GUI de Linux y ejecuto allí la herramienta de diferencia de la GUI de Linux , y luego los permissions de Linux se manejan correctamente. De lo contrario, operaré Git en la línea de command con el cliente SSH. No puede tener, por ejemplo, un IDE o un cliente Windows Git (como SourceTree ) haciendo commits en el repository sobre Samba / CIFS; no funcionará correctamente Para un cliente visual de Git, el nuevo GitKraken es una excelente opción (se ejecuta en Linux GUI).

En algunos casos puede eludir el problema con los permissions de files ejecutando el command Git sin tener en count los permissions del file (es decir, git -c core.fileMode=false ), pero he descubierto que es complicado y git -c core.fileMode=false problemas, por lo que solo a veces lo usan para operaciones que no son de escritura, como el git status , y tienen un alias de Git definido para ese propósito:

 nfm = "!f(){ git -c core.fileMode=false [email protected]; };f" 

A continuación, puede ejecutar un command Git con core.fileMode deshabilitado temporalmente, así:

 git nfm status 

Agregado 2016-05-07T01: 39: 44Z:

También vea mi publicación relacionada en Superusuario .

    Intereting Posts