2013-10-08 16 views
2

就像很多人一样,我试图在服务器端远程git上创建post-receive钩子。下面是我的代码:Git Hook'post-receive` with`git pull`通过命令行运行良好,但在自动挂钩上返回空字符串

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,但无济于事提供的所有建议:(任何帮助或建议,非常感谢了。

谢谢!

回答

1

这个问题似乎是因为.git文件之一是HEAD具有root作为文件所有者。上面的shell脚本是使用其他用户执行的。

7

确保您post-receive钩取消设置GIT_DIR,或者它仍将指挂钩的混帐回购协议,而不是你刚才cd在直播现场的混帐回购协议

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 
+0

感谢您的尝试。尝试了以上所有内容,但是所有内容都会在自动调用时返回空字符串。 –

+0

@HeruS好的。独立于广播问题,我仍然建议不要设置'GIT_DIR'。现在,墙是正确的工具?请参阅http://serverfault.com/a/390417/783。 rwall是更好的选择吗?独立于“wall”或“rwall”的 – VonC

+0

不知何故git pull仍然没有执行。 :( –