长话短说,我在 github 上创建了一个测试仓库,并在我的 Linux 机器上本地克隆了它。创建了一个包含以下内容的提交后钩子:
#!/bin/bash
echo Test message
为钩子添加了权限 777,更改了一个文件,当我执行提交时,我在控制台上收到了消息。因此,提交后钩子似乎可以工作。我现在将钩子从提交后重命名为接收后,但推送后没有收到任何消息。我继续提交并推送到主服务器,但没有显示任何消息。钩子是一样的,有 777,内容也一样,所以我不明白为什么提交后钩子可以工作,而接收后钩子却不行。我是不是忽略了什么显而易见的东西?
答案1
你忽略了一个事实,即钩子在本地仓库上运行,并且不会在仓库之间转移。因此,post-receive
你仓库中的钩子仅在以下情况下运行:你的repo 接收到某些内容,而不是远程 repo 接收到某些内容时。
具体来说,在 Github 的案例中,你不能设置“传统”的钩子,因为 Github 不想在他们的服务器上运行任意代码(疯了吧?)所以,他们提供了“网络钩子“每当 git hook 要运行时,它都会触发对你指定的 URL 的 HTTP 请求。