【问题标题】:Git post-receive hook not working but post-commit worksGit post-receive 钩子不工作但提交后工作
【发布时间】:2015-08-18 04:40:51
【问题描述】:

长话短说,我在 github 上创建了一个测试仓库,并将其克隆到我的 linux 机器上。创建了一个包含以下内容的提交后挂钩:

#!/bin/bash
echo Test message

为钩子添加了 perms 777,更改了一个文件,当我执行提交时,我在控制台上收到了消息。所以 post-commit 钩子似乎起作用了。我现在将钩子从 post-commit 重命名为 post-receive,但推送后我没有收到任何消息。我一直提交并推送到 master 并且没有显示任何消息。钩子是一样的,有 777,有相同的内容,所以我不明白为什么在提交后钩子有效,但在接收后却没有。我错过了什么明显的东西吗?

【问题讨论】:

  • pos-receive 钩子如果可能的话,如果你把它放到 gihub repo 中就会起作用。然后它会在你做git push时执行。

标签: git


【解决方案1】:

假设你有两个仓库

  1. 本地(在您的情况下从您机器中的 github 克隆)
  2. 来源(github 上的仓库)

post-commit 工作如下

您将 post-commit 放在本地 repo 中,并且每次在本地 repo 中提交后都会执行。所以这适用于你的情况。

pos-receive 工作如下

这个钩子是在收到提交后运行的。所以如果你把它放在你的本地仓库中,这将不起作用。这个钩子需要在原始仓库中。并且无论何时你推送到这个原点,在接收你的提交之后,这个钩子都会在原点执行。 简而言之,post-receive 将在接收来自其他 repo 提交的 repo 上工作。 (在这种情况下,github 上的 repo)。希望这会有所帮助。

【讨论】:

    【解决方案2】:

    简而言之,post-commit 是一个客户端钩子,而post-receive 是一个服务器端钩子,并且必须安装在您要推送的远程存储库中。。 p>

    详细地说,git 将仅在本地 git 存储库的 .git/hooks 目录中查找客户端钩子,并且只会为这个本地 repo 运行这些钩子。同样,git 将仅在远程存储库的 hooks 目录中查找服务器端挂钩,并在 any 存储库尝试推送到它时运行这些挂钩。您可以在git hooks docs

    中阅读更多关于哪个是哪个

    “修复”是将mv 你的post-receive 挂钩到远程(原始)存储库的hooks 目录,可以通过git remote -v 检索

    请注意,如果您使用GitHub 等,出于安全原因,例如不允许访问安装挂钩。请参阅here,您将需要求助于WebHooks 等。

    【讨论】:

      猜你喜欢
      • 2015-07-16
      • 1970-01-01
      • 1970-01-01
      • 2012-05-18
      • 1970-01-01
      • 2013-06-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多