Git post-receive hook不能正常工作但是post-commit工作

时间:2015-08-18 04:40:51

标签: git

长话短说,我在github上创建了一个测试仓库,在我的linux机器上本地克隆了它。使用以下内容创建了一个post-commit钩子:

#!/bin/bash
echo Test message

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

2 个答案:

答案 0 :(得分:1)

假设你有两个回购

  1. local(在您的情况下从您机器中的github克隆)
  2. Origin(github上的回购)
  3. post-commit的工作原理如下

    您将post-commit放在本地仓库中,它将在您提交此本地仓库后每次执行。所以这适用于你的情况。

    pos-receive的工作原理如下

    此挂钩旨在在收到提交后运行。因此,如果你把它放在你当地的回购中,这将无法奏效。这个钩子需要在原始仓库上。每当你推动这个原点,在接收你的提交之后,这个hoook将在原点上执行。 简而言之,post-receive将在正在接收来自其他仓库的提交的仓库中工作。 (在这种情况下,github上的repo)。希望这有帮助。

答案 1 :(得分:0)

简而言之,post-commit是客户端挂钩,而post-receive是服务器端挂钩,必须安装在您正在推动

详细说明,git将仅在您的本地git存储库的.git/hooks目录中查找客户端钩子,并且仅针对此一个本地存储库运行这些钩子。类似地,git将仅在远程存储库的hooks目录中查找服务器端挂钩,并且只要任何 repo尝试推送它就会运行这些挂钩。您可以在git hooks docs

中详细了解哪些内容

"修复"是mv您的post-receive挂钩到您的远程(源)存储库的hooks目录,可以通过git remote -v

检索

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