如何正确使用post-receive hook?

时间:2010-11-27 20:43:07

标签: git hook githooks git-post-receive

我的目录结构是:

〜/ parent.git / git的/钩/后接收

post-receive hook看起来像:

#!/bin/sh
git checkout -f

当我推入parent.git时,脚本不会运行。我无法弄清楚问题,因为互联网的每一点都说这应该有用。

我chmod'd post-receive,所以我知道这不是问题。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

正如克里斯提到的,你似乎遇到了与reset hard on git push

相同的问题

特别是在CWDGIT_DIR设置为.git目录的情况下运行钩子。这导致checkout命令在.git目录中运行,并且正常错误被覆盖。

如果您在远程.git目录中执行ls,您应该在那里找到完整的结帐。

最简单的方法是在结帐命令的前面指定GIT_WORK_TREE:

GIT_WORK_TREE=/my/git/checkout git checkout -f

Chris链接的脚本(http://utsl.gen.nz/git/post-update)应该处理这个以及其他一些潜在的问题。

答案 1 :(得分:1)

如果我有猜测,我会说推送用户没有权限在该目录中执行结帐。我建议你做的是构建最小的工作脚本并从那里构建。 IE,而不是:

git checkout -f

执行:

echo "Got here" > /tmp/git_push_log

然后尝试:

echo "Got here" > pwd_test

检查您对其运行的目录以及所需权限的假设。