tag - qué tipos de etiquetas existen en git
Git cambia los permisos de mi archivo al finalizar la compra (6)
Nuestro flujo de trabajo se desarrolla en una máquina local, confirma los cambios en un repositorio central y luego revisa la rama de ese repositorio que necesitamos.
El problema es que Git cambia la propiedad e incluso los permisos de archivo de los archivos que verifica, dependiendo del usuario que realiza el pago. Un resultado directo de esto es que nuestros archivos CSS se vuelven ilegibles después de un pago, ya que Git cambia la propiedad del archivo a la persona que hizo el retiro de Git en la raíz web.
Ejemplo:
- Antes de
git pull
:style.css
propiedad deuser_a:group_a
- Después de
git pull
:style.css
propiedad deuser_b:user_b
Deseo mantener la propiedad como user_a:group_a
. No quiero tener que iniciar sesión cada vez que un miembro de mi equipo haya realizado cambios en los archivos y cambie la propiedad a la configuración original.
¿Cómo lidian otras personas con esto? ¿Cómo se manejan los repositorios utilizados por múltiples usuarios? Tenemos suphp en nuestro sistema y no podemos quitárselo.
A menudo corro un
git checkout -f file.xml
... en un archivo version.xml con permisos de escritura mundial, ya que lo modifico continuamente y quiero devolverlo al estado normal.
Pero eso restablece los permisos. Una versión un poco más larga:
git show HEAD:./file.xml > ./file.xml
Simplemente restablece el contenido.
De forma alternativa, puede establecer un permiso predeterminado para la carpeta en cuestión, de la siguiente manera: https://unix.stackexchange.com/questions/1314/how-to-set-default-file-permissions-for-all-folders-files-in-a-directory
Git no cambia los permisos ni la propiedad del archivo. Es solo que (sobre todo) tampoco lo almacena, no existe en su repositorio, por lo tanto se cambian a lo que tenga su usuario. Al igual que con cualquier creación de archivo.
Git admite dos conjuntos de permisos: bit ejecutable activado y bit ejecutable desactivado. Nada más. La información de propiedad no se almacena en absoluto.
Ver este hilo : "Si quieres permisos específicos, tendrás que hacerlo manualmente".
Se sugieren algunas soluciones: puede usar una herramienta separada para hacerlo por usted, usar una combinación adecuada de cuenta de usuario y umask para configurarlas de manera predeterminada o escribir un git hook para hacerlo. Se debería instalar un gancho en el usuario que realiza el pago.
Al igual que @ikke, dijo en los comentarios, Git no es realmente una herramienta de despliegue y no debería usarse como tal. Es un sistema de control de versiones para el código fuente.
La solución más sencilla es ejecutar git como user_a
.
Para mí, la mejor solución fue la creación de un script de shell que corrige los permisos. Por ejemplo:
.git/hooks/post-checkout:
#!/bin/sh
chmod +x tools/*
Por cierto, el pago y envío no es el único caso cuando git se mete con los permisos, sino también cuando lo haces. Manejo eso con el gancho .git/hooks/post-merge
.
Idealmente, puede crear un script de shell que corrige permisos en algún lugar de su repositorio (por ejemplo, tools/fixpermissions.sh
) y llamarlo en ambos enganches. No olvides cambiar los permisos para ese archivo manualmente;)
#!/bin/sh
chmod a+x tools/fixpermissions.sh
tools/fixpermissions.sh
Una posible solución a su problema podría estar aquí: conservar los permisos de archivos con Git
Me funcionó, así que puedes probar y ver cómo funciona para ti.