【问题标题】:git post-receive hook not runninggit post-receive 钩子没有运行
【发布时间】:2012-01-02 14:38:45
【问题描述】:

我有一个裸仓库服务器端,我能够从我的本地机器成功提交和推送。但是,接收后挂钩未运行。详情:

  • 使用 SSH 作为协议
  • 我已将标准“post-receive.sample”重命名为“post-receive”
  • 此文件具有-rwxr-xr-x 权限
  • 文件归拥有 repo 的同一用户所有,即登录和推送的同一 SSH 用户
  • 实际推送正常;文件已更新 - 只是没有运行的钩子
  • 我尝试在钩子之前和之后放置echo "Some text",但这没有显示(参见:Post Commit Hook Not Running)。
  • Hook 脚本包含在下面,尽管这似乎不会导致问题
  • 在 Ubuntu 10.04 上使用 git 1.7.0.4

.

user@server:/home/repos/project1/hooks# cat post-receive
#!/bin/sh
echo "Hook is running..."
export GIT_WORK_TREE=/home/web/project1/www/
git checkout -f
rm -rf /home/web/project1/www/temp/

【问题讨论】:

    标签: git hook


    【解决方案1】:

    为了让 Git 挂钩运行,它需要设置权限以允许其可执行。如果钩子似乎没有运行,check the permissions,并确保它是可执行的。如果不是,您可以像这样使所有钩子可执行:

    chmod ug+x .git/hooks/*
    

    ...或者如果你想让单个钩子(例如post-receive)可执行:

    chmod ug+x .git/hooks/post-receive
    

    (感谢this post

    【讨论】:

    • 在 '.git/hooks/' 中找不到 post-receive 文件
    【解决方案2】:

    我遇到了这个问题。我的脚本文件名有错字。

    post-receive 而不是 post-receive

    【讨论】:

    • 只花了大约一个小时试图调试这个......你的答案结果是正确的?‍♂️谢谢你
    【解决方案3】:

    问题与文件系统的挂载有关。分区挂载为noexec,因此无法执行任何文件。这导致钩子不运行。我删除了noexec 标志,现在它工作得很好。

    【讨论】:

    • 你是如何去掉这个没有钩子的部分的?
    • 我遇到了同样的问题。我将 git 目录移动到不同的位置(例如 mv .git "$HOME/repo.git"),然后运行 ​​git init --separate-git-dir=$HOME/repo.git 再次初始化目录。之后,挂钩确实按预期运行(确保未设置 GIT_WORK_TREE 环境变量或其他覆盖,否则将不会使用来自 .git/config 的工作树)。
    • 有人找到了一种解决方法,我们无法将 .git 文件夹移动到启用exec 的分区中?
    • 我的问题最终是我的脚本由于对我尝试运行的文件的权限而静默失败,尽管它正在运行。我不得不使用 su -l -c "blah" 来测试发生了什么。
    【解决方案4】:

    如果代码库没有更改,GIT 似乎不会运行 post-receive 挂钩。

    就我而言,

    post 钩子没有被执行,但“push”操作不断返回以下消息。

    一切都是最新的

    所以我只是在我的代码中创建了一个空文件,提交然后推送到远程。 post-receive 钩子在其上被执行。

    【讨论】:

    • 有同样的问题,但不希望空提交使我的分支混乱。没有其他选择?
    • 我在反复测试以调整代码部署时遇到了这个问题。设置完成后,在现实世界中,代码库无论如何都会发生变化。所以这个问题不会关心我们大多数人。话虽如此,您的问题的答案是,我没有进一步调查。所以我现在不知道。
    • 如果您的情况允许,另一种方法是删除远程分支并重新推送。
    • 要回答后续问题,您可以通过将远程 repo 设置为较早的提交来强制更新而不修改堆栈,即 git commit -f branch repo:commit_id ..我正在处理现在就用这个​​,这是我发现的最好的方法。
    【解决方案5】:

    我使用的是 MacBook,这对我的情况有所帮助:

    chmod ug+x .husky/*
    chmod ug+x .git/hooks/*
    

    【讨论】:

      【解决方案6】:

      我在 Centos 6 系统上遇到了同样的问题,结果证明 SELinux 阻止了 hooks 脚本的运行。将 httpd_git_script_t 变成一个许可域对此有帮助(因为“sesearch -A -s httpd_git_script_t -p exec”没有产生任何结果,即在 httpd_git_script_t 域中运行的进程没有被允许执行权限):

      semanage permissive -a httpd_git_script_t
      

      【讨论】:

        【解决方案7】:

        你确定它没有运行吗?它一定在运行,你只是看不到它。我的猜测是你的 ssh 会话在执行时没有设置标准输出,所以你永远不会看到你的 echo 的输出。该链接建议在本地进行测试,而不是通过 ssh。

        【讨论】:

        • 这应该是评论,而不是答案。
        • 错了。这是一个答案。胡克在跑,他只是看不见。
        • @AndrewKolesnikov Hook 没有运行,我尝试输入 echo "test" > /home/web/project1/ 并且它没有创建任何文件。 Hook 在本地尝试时确实有效。
        • 你的钩子必须在 user@server:/home/repos/project1/.git/hooks
        • 这是一个正确的答案。这个答案开始的问题显然是修辞性的。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-02
        • 2017-10-19
        • 2010-11-24
        • 2014-05-13
        • 2014-10-28
        相关资源
        最近更新 更多