rama - ¿Cómo saber qué causa los permisos de archivos para cambiar al verificar archivos con git?
git pull origin master (2)
Después de enviar archivos a nuestro servidor, se ejecuta el siguiente enlace posterior a la recepción:
#!/bin/sh
export GIT_WORK_TREE=/home/user/www/
git checkout -f
Sin embargo, los archivos obtienen 600
permisos muy extraños y las carpetas 700
al finalizar la compra. Esto no es lo que espero (en nuestros otros servidores obtenemos 644
y 755
). De este hilo entiendo que git no establece permisos, por lo que no se puede culpar a git. Mi pregunta es: ¿qué es? ¿Cómo puedo averiguar cuál es la causa de este problema?
Ya lo resolví temporalmente ejecutando un script adicional al momento de pagar para corregir los permisos, pero estoy interesado en resolver la causa raíz.
Estoy usando gitolita para administrar los repositorios, pero dudo que esa sea la causa. Pero, nuevamente, estoy feliz de saber dónde puedo comenzar, porque en este momento no estoy seguro de cómo investigar esto.
De acuerdo con las respuestas iniciales, he examinado la configuración de umask en el servidor. El usuario de git
(que el usuario usó para cargar los archivos), la configuración umask es 0002. Esto se confirma en el siguiente ejercicio:
git@server:~$ umask
0002
git@server:~$ touch newfile
git@server:~$ ls -la newfile
-rw-rw-r-- 1 git git 0 Aug 5 10:46 newfile
Detalles adicionales:
- Linux utilizado tanto desde el lado del servidor como desde el lado del desarrollo
- En el repositorio local, los permisos son 755 y 644
- filemode se establece en true en .git / config
Sin embargo, los archivos obtienen 600 permisos muy extraños y las carpetas 700 al finalizar la compra.
Parece que tu shell tiene una configuración de umask restrictiva, posiblemente umask 0177
.
De este hilo entiendo que git no establece permisos, por lo que no se puede culpar a git.
No, es el ajuste umask
de tu caparazón.
Mi pregunta es: [...] [¿cómo] puedo descubrir cuál es la causa de este problema?
Ejecute umask
, le dirá cuál es su configuración actual. Es como ser 0177
o similar. Si desea saber por qué , debe consultar los archivos .rc utilizados por /bin/sh
, probablemente .profile
o .bashrc
, y otros archivos de fuentes.
Puede tener configuraciones de umask
muy restrictivas, pero anularlas en su secuencia de comandos, agregando una línea umask
como se sugirió @VonC.
Como en " Git change default umask when update file ", ¿puedes agregar umask a tu gancho?
#!/bin/sh
umask 002
export GIT_WORK_TREE=/home/user/www/
git checkout -f
Eso debería establecer los permisos de archivo en 664 y los permisos de directorio en 775.
Con respecto a la gitolita específicamente, consulte la sección umask
del archivo gitolite.rc
:
$UMASK
, octal, predeterminado0077
El UMASK predeterminado que utiliza gitolite otorga permisos
rwx------
a todos los repos y sus contenidos.
Las personas que quieren ejecutar gitweb (o cgit, redmine, etc.) se dan cuenta de que esto no funcionará.La forma correcta de lidiar con esto es darle a esta variable un valor como
0027
(observe la sintaxis: se requiere el 0 inicial), y luego haga que el usuario ejecute el servidor web (apache, www-data, lo que sea) como miembro de ''git
''grupo.Si ya ha instalado gitolite, los archivos existentes deberán repararse manualmente (para una
umask
o0027
, seríachmod -R g+rX
). Esto se debe a queumask
solo afecta los permisos en los archivos recién creados, no en los existentes.