update tutorial tag tab name example commits commands git hook

tutorial - git tag name



¿Qué usuario ejecuta el gancho git? (2)

Tengo un enlace posterior a la actualización en mi servidor, de modo que cuando

git push

Se hace un tirón en el directorio web en vivo. Sin embargo, mientras que la inserción siempre tiene éxito, el enlace posterior a la actualización a veces falla.

El gancho es bastante simple:

#!/bin/sh # # An example hook script to prepare a packed repository for use over # dumb transports. # # To enable this hook, rename this file to "post-update". cd /var/www env -i git pull

Estoy presionando actualizaciones desde una variedad de lugares, pero a veces tengo que iniciar sesión como root en el servidor y hacer un manual

env -i git pull

Aunque solo tengo que hacerlo el 20% del tiempo. ¿Alguna idea de por qué fallaría al azar? Además, ¿cómo puedo hacer que registre mensajes de error, ya que podría estar funcionando como alguien que no puede escribir en el sistema de archivos?


Decidí probar esto en mi servidor gitlab 6 creando un enlace de recepción previa y haciendo eco de la información del usuario

$ cat /home/git/repositories/foo/foo.git/hooks/pre-recieve #!/bin/bash set -x echo -e "The user the hook is run as is $USER" echo -e "Just to doublecheck, the user is $(whoami)" exit 1

Parece que se ejecuta como el usuario git

$ git push Counting objects: 3, done. Delta compression using up to 8 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 269 bytes | 0 bytes/s, done. Total 3 (delta 1), reused 0 (delta 0) remote: + echo -e ''The user the hook is run as is'' remote: The user the hook is run as is remote: ++ whoami remote: + echo -e ''Just to doublecheck, the user is git'' remote: Just to doublecheck, the user is git remote: + exit 1


Los ganchos se ejecutan como el usuario hace el empuje. Si tiene algún tipo de configuración prefabricada, puede ser un usuario como git o gitosis , o puede ser usted. Solo mira cómo tienes configurado el control remoto. ( git remote show <remote-name> o simplemente examine .git / config si no lo sabe) Presumiblemente, está presionando a través de SSH, y hay un nombre de usuario @ hostname en la URL.

PD: es bastante rápido para demostrar esto: solo clona un repositorio localmente, lanza un enlace posterior a la actualización con un echo $USER o algo similar, e intenta presionar como tú o un usuario diferente (directamente oa través de ssh).