Какой пользователь запускает git hook? - PullRequest
27 голосов
/ 13 апреля 2010

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

git push

выполняет поиск в веб-каталоге. Однако, несмотря на то, что 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 на сервере и вручную делать

env -i git pull

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

Ответы [ 2 ]

19 голосов
/ 13 апреля 2010

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

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

2 голосов
/ 16 сентября 2014

Я решил проверить это на своем сервере 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...