tag - Git está cambiando los permisos de mi archivo cuando empujo al servidor
git tag name (1)
Estoy usando git para administrar un sitio web en un servidor.
Tengo un repositorio 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 repositorio simple en el servidor que utiliza post-receive
para apuntar el repositorio delante de apache. Los contenidos de public
carpetas public
de Apache se encuentran debajo, no en el repositorio.
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 a mi código en el servidor web.
¿Cómo puedo arreglar esto? Estoy usando gitolita si eso hace alguna diferencia.
archivo de configuración del servidor git
[core]
repositoryformatversion = 0
filemode = true
bare = true
Esta publicación de hilo ofrece una muy buena explicación:
Esto es por diseño. Si bien la estructura de datos de git técnicamente puede almacenar bits de modo Unix en sus árboles, en la historia de git se descubrió que el respeto de cualquier cosa más allá de un simple bit ejecutable terminó siendo más engorroso para los casos de uso normales de git (es decir, código de almacenamiento de personas u otro archivos en un repositorio).
Podríamos agregar una opción de configuración para respetar los modos de archivo, pero en general se considera que no vale la pena. Soluciona solo una parte del problema general de metadatos, ya que omite los nombres o identificadores de propietarios y grupos, así como los metadatos extendidos como las ACL.
Si los modos son importantes para usted, los arreglos sugeridos son uno de los siguientes:
Use una herramienta como "metastore" a la que se puede llamar desde git hooks, y guardará y restaurará los permisos de archivo en un archivo que se rastrea en el repositorio. Tenga en cuenta que al usar una herramienta de este tipo, existe una condición de carrera para proteger los archivos (es decir, git creará su archivo como 644 y luego Metastore lo corregirá a 600; mientras tanto, alguien podría leer su archivo).
Dependiendo de lo que esté almacenando, puede tener sentido mantener su repositorio en otro directorio, protegido por permisos, y luego usar una herramienta separada para desplegar sus archivos desde el repositorio a su ubicación final (por ejemplo, un Makefile u otra instalación). herramienta).