我的目录结构是:
~/parent.git/.git/hooks/post-receive
接收后挂钩如下所示:
#!/bin/sh
git checkout -f
当我推入 parent.git 时,脚本不会运行。我无法弄清楚这个问题,因为互联网上的每一点都说这应该有效。
我chmod'd post-receive,所以我知道这不是问题。任何帮助深表感谢。
我的目录结构是:
~/parent.git/.git/hooks/post-receive
接收后挂钩如下所示:
#!/bin/sh
git checkout -f
当我推入 parent.git 时,脚本不会运行。我无法弄清楚这个问题,因为互联网上的每一点都说这应该有效。
我chmod'd post-receive,所以我知道这不是问题。任何帮助深表感谢。
正如克里斯提到的那样,您似乎遇到了与git push 硬重置相同的问题
特别是钩子运行CWD
并GIT_DIR
设置到.git
目录。这会导致 checkout 命令在.git
dir 中运行,并且有关该命令的正常错误被覆盖。
如果您在远程.git
目录中执行 ls,您应该在那里找到完整的结帐。
解决这个问题的最简单方法是在 checkout 命令的前面指定 GIT_WORK_TREE:
GIT_WORK_TREE=/my/git/checkout git checkout -f
Chris 链接的脚本 ( http://utsl.gen.nz/git/post-update ) 应该解决这个问题和其他一些潜在问题。
如果我有一个猜测,我会说推送用户无权在该目录中执行结帐。我建议你做的是构建最小的工作脚本并从那里构建。IE,而不是:
git checkout -f
做:
echo "Got here" > /tmp/git_push_log
然后尝试:
echo "Got here" > pwd_test
检查您对它在哪个目录中运行以及需要哪些权限的假设。