Git está cambiando los permissions de mi file cuando presiono al server

Estoy usando git para administrar un website en un server.

Tengo un repository local que se muestra a continuación

local@workstation:myapp$ ls -l | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf("%0o ",k);print}' total 16 755 drwxr-xr-x@ 18 thomas staff 612 Jun 13 15:35 application 755 drwxr-xr-x@ 11 thomas staff 374 Jun 12 16:25 assets 644 -rw-r--r--@ 1 thomas staff 6399 Jun 22 11:45 index.php 755 drwxr-xr-x@ 10 thomas staff 340 May 14 15:22 system 

Tengo un repository vacío en el server que usa post-receive para apuntar el repository frente a apache. Los contenidos de public carpetas public de Apache están por debajo, no por el repository simple.

 root@server:/srv/public/myapp# ls -l | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf("%0o ",k);print}' total 20 700 drwx------ 15 root root 4096 Jun 27 11:31 application 700 drwx------ 10 root root 4096 Jun 27 11:31 assets 600 -rw------- 1 root root 6399 Jun 27 11:31 index.php 700 drwx------ 8 root root 4096 Jun 27 11:31 system 

Esto está causando caos en mi código en el server web.

¿Cómo puedo arreglar esto? Estoy usando gitolita si eso hace alguna diferencia.

file de configuration del server git

 [core] repositoryformatversion = 0 filemode = true bare = true 

Este hilo de publicación ofrece una muy buena explicación:

Esto es por layout. Aunque la estructura de datos git puede almacenar técnicamente bits de modo Unix en sus treees, al principio de la historia de git se descubrió que respetar algo más allá de un simple bit ejecutable resultaba más engorroso para los casos de uso normal de git (es decir, gente almacenando código u otro files en un repository).

Podríamos agregar una opción de configuration para respetar los modos de file, pero en general se ha considerado que no valía la pena. Resuelve solo una parte del problema general de metadatos, ya que omite los nombres o ids de propietarios y grupos, así como metadatos extendidos como ACL.

Si los modos son importantes para ti, las soluciones sugeridas son una de:

  1. Utilice una herramienta como "metastore" que se puede invocar desde git hooks, y saveá y restaurará los permissions de file en un file que se rastrea en el repository. Tenga en count que cuando se utiliza una herramienta de este tipo existe una condición de carrera en la protección de files (es decir, git creará su file como 644 y luego metastore lo corregirá a 600, mientras tanto, alguien podría leer su file).

  2. Dependiendo de lo que está almacenando exactamente, puede tener sentido mantener su repository en otro directory, protegido por permissions, y luego usar una herramienta separada para implementar sus files desde el repository hasta su location final (por ejemplo, un Makefile u otra installation). herramienta).