Git post接收钩子不工作,但post提交工作

Git post接收钩子不工作,但post提交工作,git,Git,长话短说,我在github上创建了一个测试repo,并在我的linux机器上本地克隆了它。创建了具有以下内容的提交后挂钩: #!/bin/bash echo Test message 为钩子添加了perms777,更改了一个文件,当我执行提交时,我在控制台上得到了消息。因此,post-commit钩子似乎有效。我现在将钩子从post commit重命名为post receive,但在推送之后,我没有收到任何消息。我不断提交并推送至主控,但未显示任何消息。钩子是一样的,有777,有相同的内容,所

长话短说,我在github上创建了一个测试repo,并在我的linux机器上本地克隆了它。创建了具有以下内容的提交后挂钩:

#!/bin/bash
echo Test message

为钩子添加了perms777,更改了一个文件,当我执行提交时,我在控制台上得到了消息。因此,post-commit钩子似乎有效。我现在将钩子从post commit重命名为post receive,但在推送之后,我没有收到任何消息。我不断提交并推送至主控,但未显示任何消息。钩子是一样的,有777,有相同的内容,所以我不明白为什么post提交钩子工作,而post接收钩子不工作。我遗漏了什么明显的东西吗?

假设你有两份回购协议

  • 本地(在您的情况下,从计算机中的github克隆)
  • 来源(在github上回购)
  • post commit
    的工作原理如下

    您将post commit放在本地repo中,每次在本地repo中提交后,它都会执行。这在你的情况下有效

    pos-receive
    的工作原理如下

    这个钩子将在收到提交后运行。所以,如果你把它放在本地回购协议中,这就行不通了。此挂钩必须位于原始回购协议上。每当你推到这个原点,在收到你的提交后,这个hoook将在原点执行。
    简而言之,
    post receive
    将对从其他回购接收提交的回购起作用。(在本例中为github上的回购)。希望这能有所帮助。

    简而言之,
    提交后
    是客户端钩子,而
    接收后
    是服务器端钩子,必须安装在推送到的远程存储库中

    更详细地说,git将只在本地git存储库的
    .git/hooks
    目录中查找客户端钩子,并且只为这个本地repo运行这些钩子。类似地,git将只在远程存储库的
    hooks
    目录中查找服务器端钩子,并在任何repo尝试推送到它时运行这些钩子。你可以阅读更多关于哪个是哪个的信息

    “修复”是将
    mv
    您的
    post-receive
    挂接到远程(源)存储库的
    hooks
    目录中,该目录可以通过
    git-remote-v


    请注意,如果您正在使用或类似工具,出于安全原因,不允许访问安装挂钩,例如,请参阅,您将需要使用或类似工具。

    如果可能,将pos接收挂钩放入gihub回购,则pos接收挂钩将起作用。然后,当您执行
    git push
    时,它将执行。