Подтвердить что ты не робот

Какой пользователь запускает git hook?

У меня есть крюк после обновления на моем сервере, так что когда я

git push

он натягивает живой веб-каталог. Тем не менее, хотя нажатие всегда выполняется успешно, хук после обновления иногда терпит неудачу.

Крючок довольно прост:

#!/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

Я нажимаю обновления из разных мест, но иногда мне приходится входить в систему как root на сервере, а manuall -

env -i git pull

Мне нужно делать это только 20% времени. Любые идеи, почему это произойдет случайно? Кроме того, как я могу заставить его регистрировать сообщения об ошибках, поскольку он может работать как кто-то, кто не может писать в файловую систему?

4b9b3361

Ответ 1

Крючки запускаются как пользователь, выполняющий push. Если у вас есть какая-то предварительная настройка, которая может быть пользователем типа git или gitosis, или она может быть вами. Просто посмотрите, как настроен пульт. (git remote show <remote-name> или просто изучить .git/config, если вы не знаете) Предположительно, вы нажимаете SSH, а в URL-адресе есть имя пользователя @hostname.

P.S. Это довольно быстро, чтобы продемонстрировать это - просто клонируйте репо локально, бросьте заново обновление с помощью echo $USER или что-то подобное, и попробуйте нажать как себя или другого пользователя (напрямую или через ssh).

Ответ 2

Я решил протестировать это на моем сервере gitlab 6, создав крюк предварительного приема и повторив информацию пользователя

$ 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

Похоже, что он запускается как пользователь 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