¿Hay alguna manera de evitar que git cambie los permisos y la propiedad al realizar pull?

¿Hay alguna manera de evitar que git cambie los permisos y la propiedad al realizar pull?

Cada vez que hago git pullo git reset, gitrestablece 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 topdira aplicar los directorios secundarios debajo de él para que se httpaplicara 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 httpsea así:

$ newgrp http
$ git clone ...

Este método forzará que todos los archivos nuevos creados tengan su grupo configurado httpen lugar del grupo predeterminado normal de yuri, pero esto solo funcionará siempre que recuerde hacer algo newgrpantes 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í.

información relacionada