Los permissions de Git cambian cuando varias personas empujan / tiran

Tengo un repository git y cuando creo un file localmente en mi repository, los permissions se establecen en -rw-r--r-- .

Cuando presiono estos cambios y otro desarrollador realiza estos cambios, este file ahora tiene los permissions -rwxr-xr-x para él.

El mismo problema ocurre a la inversa, cuando crea un file con los permissions establecidos en -rw-r--r-- y empuja a nuestro repository de git, luego yo retiro los cambios que ahora tienen los permissions -rwxr-xr-x .

¿Qué está causando esto y cómo puedo solucionarlo de modo que sean cuales sean los permissions cuando un dev empuja, esos mismos permissions se aplicarán cuando se ejecute el siguiente desarrollador?

Si es importante, estamos usando Git dentro de TFS.

En una pregunta similar en ServerFault ( enlace ) los usuarios harrymc y boldewyn señalaron que hay algunos filesystems considerados "rotos" por el equipo de git.

Esos filesystems tienen problemas con el bit ejecutable. En esos debe ignorar los cambios de permissions de files para que funcione:

 git config core.filemode false 

Eso no cambia los permissions de file ya almacenados en el server. Por lo tanto, después de cambiar la configuration del modo de file, es posible que deba verificar cómo llegan los permissions después de que checkout la checkout la twig.

Además de git config core.filemode false , puede establecer o deshacer el bit ejecutable en el índice git, asegurándose de que git registre internamente el permiso correcto:

Por ejemplo:

 find . -name '*.sh' | xargs git update-index --chmod=+x 

En tu caso

 xargs git update-index --chmod=_x -- myFile