我的服务器上有一个更新后的挂钩,这样当我
时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用户身份登录并且手动执行
env -i git pull
我只需要做20%的时间。任何想法为什么会随机失败?另外,如何记录错误消息,因为它可能作为无法写入文件系统的人运行?
答案 0 :(得分:19)
钩子在用户执行推送时运行。如果您有某种预制设置,可能是git
或gitosis
之类的用户,也可能是您。只需看看如何配置遥控器。 (git remote show <remote-name>
或者只是检查.git / config,如果你不知道的话)大概你是通过SSH推送的,并且URL中有一个用户名@ hostname。
P.S。这很快就能证明这一点 - 只需在本地克隆一个repo,用echo $USER
或类似的东西抛出更新后的钩子,然后尝试推送自己或其他用户(直接或通过ssh)。
答案 1 :(得分: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