Cada vez que hago git pull
o git reset
, git
restablece los cambios en los permisos y la propiedad que hice. Ver por ti mismo:
#!/usr/bin/env bash
rm -rf 1 2
mkdir 1
cd 1
git init
echo 1 > 1 && git add 1 && git ci -m 1
git clone . ../2
cd $_
chmod 0640 1
chgrp http 1
cd ../1
echo 12 > 1 && git ci -am 2
cd ../2
stat 1
git pull
stat 1
La salida:
$ ./1.sh 2>/dev/null | grep -F 'Access: ('
Access: (0640/-rw-r-----) Uid: ( 1000/ yuri) Gid: ( 33/ http)
Access: (0664/-rw-rw-r--) Uid: ( 1000/ yuri) Gid: ( 1000/ yuri)
¿Hay alguna manera de solucionarlo?
Quiero que algunos archivos/directorios sean accesibles para que el servidor web los escriba.
Respuesta1
Parece que el usuario que estás ejecutando tiene el grupo predeterminado configurado en yuri
. Puedes confirmar esto así:
$ id -a
uid=1000(saml) gid=1000(saml) groups=1000(saml),10(wheel),989(wireshark)
El UID de su cuenta es este: uid=1000(saml)
mientras que el grupo predeterminado es git=1000(saml)
y los grupos secundarios son posteriores.
NOTA:Si desea que el clon de git tenga una propiedad específica, tiene al menos 2 opciones.
Opción 1
Configure un directorio principal con los permisos que desee, así:
$ mkdir topdir
$ chgrp http topdir
$ chmod g+s topdir
$ cd topdir
$ git clone ....
Esto obligó al directorio topdir
a aplicar los directorios secundarios debajo de él para que se http
aplicara el grupo. Esto funcionará en general, pero puede generar problemas, ya que si mueve archivos a este espacio de trabajo de git clone, los cambios realizados anteriormente no aplicarán sus grupos a esos archivos.
Opcion 2
Antes de trabajar, cambie su grupo predeterminado para que http
sea así:
$ newgrp http
$ git clone ...
Este método forzará que todos los archivos nuevos creados tengan su grupo configurado http
en lugar del grupo predeterminado normal de yuri
, pero esto solo funcionará siempre que recuerde hacer algo newgrp
antes de trabajar en este espacio de trabajo.
Otras opciones
Si ninguno de estos parece aceptable, puede intentar usar ACL en el directorio del espacio de trabajo de git. Estos se analizan en varias preguntas y respuestas de este sitio, como en esta pregunta y respuesta titulada:Obtener nuevos archivos para heredar permisos de grupo en Linux.
Respuesta2
La solución que uso esejecutar el comando como usuarioque tiene los permisos que desea conservar:
sudo -u user command
Esto evita que los permisos cambien. Lo uso cuando actualizo los repositorios de git en mi VPS, mientras mantengo los permisos de archivo establecidos para el usuario del servidor web.
Ver también la misma pregunta.aquí.