1

我的目录结构是:

~/parent.git/.git/hooks/post-receive

接收后挂钩如下所示:

#!/bin/sh
git checkout -f

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

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

4

2 回答 2

2

正如克里斯提到的那样,您似乎遇到了与git push 硬重置相同的问题

特别是钩子运行CWDGIT_DIR设置到.git目录。这会导致 checkout 命令在.gitdir 中运行,并且有关该命令的正常错误被覆盖。

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

解决这个问题的最简单方法是在 checkout 命令的前面指定 GIT_WORK_TREE:

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

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

于 2011-08-29T02:00:22.287 回答
1

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

git checkout -f

做:

echo "Got here" > /tmp/git_push_log

然后尝试:

echo "Got here" > pwd_test

检查您对它在哪个目录中运行以及需要哪些权限的假设。

于 2010-11-28T03:51:18.460 回答