就像很多人一样,我试图在服务器端远程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):
我尝试将pwd
,ls
命令包含到post-receive
中,一切都适用于这两种情况。除了它似乎返回空输出的git pull
之外。
已经完成了SO中提供的所有建议但无济于事:(。非常感谢任何帮助或建议。
谢谢!
答案 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)
问题似乎是因为.git
中HEAD
的其中一个文件有root
作为文件所有者。上面的shell脚本是使用另一个用户执行的。