trucos tag repositorio rama name conectar con como commits commands comentarios cambiar git permissions file-permissions

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:

  1. 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).

  2. 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).