带有`git pull`的Git Hook`post-receive`通过命令行运行良好,但在自动挂钩时返回空字符串

时间:2013-10-08 08:10:21

标签: git githooks

就像很多人一样,我试图在服务器端远程git上创建一个post-receive挂钩。以下是我的代码:

cd [LIVE SITE DIR] && git pull origin master | wall

我添加了wall以便可以广播,我可以收到通知。我注意到的一件事是当我运行./post-receive时,一切正常。

Broadcast message from root (Tue Oct  8 14:58:13 2013):

Updating 7ebd925..1a25791
Fast-forward
 html/header.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

但是,当我尝试git push时,./post-receive似乎被调用但我收到了以下空广播:

Broadcast message from root (Tue Oct  8 14:53:32 2013):

我尝试将pwdls命令包含到post-receive中,一切都适用于这两种情况。除了它似乎返回空输出的git pull之外。

已经完成了SO中提供的所有建议但无济于事:(。非常感谢任何帮助或建议。

谢谢!

2 个答案:

答案 0 :(得分:9)

确保您的post-receive挂钩未设置GIT_DIR,或者仍然会引用挂钩的git repo,而不是您cd所在的实际网站的git repo。

cd [LIVE SITE DIR]
unset GIT_DIR
git pull

或者:

cd [LIVE SITE DIR]
env -i origin master

或者:

cd [LIVE SITE DIR]
git --git-dir=[LIVE SITE DIR]/.git pull

答案 1 :(得分:1)

问题似乎是因为.gitHEAD的其中一个文件有root作为文件所有者。上面的shell脚本是使用另一个用户执行的。