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


11

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 forma de evitarlo?

Quiero hacer que algunos archivos / directorios sean accesibles para que el servidor web los escriba.

Respuestas:


4

Parece que el usuario que está ejecutando tiene el grupo predeterminado establecido 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 git tenga una propiedad específica, entonces tiene al menos 2 opciones.

Opción 1

Establezca un directorio principal con los permisos que desee de esta manera:

$ mkdir topdir
$ chgrp http topdir
$ chmod g+s topdir

$ cd topdir
$ git clone ....

Esto obligó al directorio topdira aplicar cualquier directorio secundario debajo para httpaplicar el grupo . Esto funcionará en gran medida, pero puede generar problemas, ya que si mueve los archivos a este espacio de trabajo de clonación de git, esos archivos no harán que sus grupos se vean obligados por los cambios realizados anteriormente.

Opcion 2

Antes de trabajar, cambie su grupo predeterminado para que le httpguste:

$ newgrp http
$ git clone ...

Este método forzará a los archivos nuevos creados a tener su grupo configurado en httplugar de su grupo predeterminado normal de yuri, pero esto solo funcionará mientras recuerde hacer newgrpantes de trabajar en este espacio de trabajo.

Otras opciones

Si ninguno de estos parece aceptable, puede intentar usar ACL en su lugar en el directorio de espacio de trabajo de git. Estos se discuten en múltiples preguntas y respuestas en este sitio, como en estas preguntas y respuestas tituladas: Obtener nuevos archivos para heredar los permisos de grupo en Linux .


Primero, debes tener sentido newgrp. Entonces, ¿cambia el grupo solo para el shell actual? Y, por último, el punto era hacer que solo los archivos / directorios específicos fueran accesibles para la escritura del servidor web. Después de todo, probablemente debería arreglarlos manualmente, o configurar algún gitgancho ...
x-yuri

@ x-yuri - sí, lo siento, son las 5 de la mañana aquí y estoy a punto de irme a la cama 8-). Sí, esto solo persiste para el shell actual, por lo que sería un inconveniente para ese enfoque. Si tiene la intención de tener solo cierto acceso para el servidor web, eso será complicado, y es probable que desee usar ACL en ese momento. También es posible que desee agregar estos detalles a su Q. Tal como está, no está claro cuál es su propósito, por lo que solo puedo responderle en términos no específicos.
slm

1
@ x-yuri: un
enlace de

1
@ x-yuri: los permisos de control se analizan en el libro de git debajo de ganchos: git-scm.com/book/en/Customizing-Git-Git-Hooks
slm

En realidad, no veo cómo cambiar de grupo solo para el shell actual puede ser un inconveniente, para ser honesto. Me preocupaba que no cambiara el funcionamiento del resto de las aplicaciones.
x-yuri

2

La solución que uso es ejecutar el comando como el usuario que tiene los permisos que desea mantener:

sudo -u user command

Esto evita que los permisos cambien. Lo uso cuando actualizo repositorios git en mi VPS, mientras mantengo los permisos de archivo establecidos para el usuario del servidor web.

Vea también la misma pregunta aquí .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.