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).