【问题标题】:How to properly use post-receive hook?如何正确使用 post-receive hook?
【发布时间】:2011-05-16 16:21:45
【问题描述】:

我的目录结构是:

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

post-receive 钩子看起来像:

#!/bin/sh
git checkout -f

当我推入 parent.git 时,脚本没有运行。我无法弄清楚问题所在,因为互联网上的每一点都说这应该可以工作。

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

【问题讨论】:

标签: git hook githooks git-post-receive


【解决方案1】:

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

git checkout -f

做:

echo "Got here" > /tmp/git_push_log

那就试试吧:

echo "Got here" > pwd_test

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

【讨论】:

    【解决方案2】:

    正如 Chris 所说,您似乎遇到了与 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) 应该可以解决这个问题以及其他一些潜在问题。

    【讨论】:

    • 不知道这在历史上是怎样的,但刚才我用 git 2.0.0 尝试过,至少 pre-commit 运行时将CWD 设置为 repo root。
    猜你喜欢
    • 2015-03-22
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    • 2013-07-17
    • 1970-01-01
    • 2013-06-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多