Git post-receive hook无效

spa*_*nky 8 git curl hudson githooks git-post-receive

我的设置是一个Windows XAMPP服务器,启用了cURL,并安装了Git和Hudson.Hudson每分钟都会调查Git来查找更改,如果找到它们,它会创建一个构建版本.我使用这个版本作为我的测试服务器.这很好用.

我想在我的中央远程存储库上设置一个post-receive hook,它运行Hudson的force build功能.

我在我的中央Git存储库的hooks目录中创建了一个名为"post-receive"的post-receive文件,该文件是从开发人员的本地分支推送到的.他们每个都推送到中央存储库中的自己的分支.我想在每次推送后立即运行post-receive构建,而不是每分钟都有Hudson轮询Git.

当我打开一个shell到远程服务器并在hooks文件夹中运行"post-receive"时,它会运行.当人们从本地存储库副本推送到中央存储库副本时,它就不会被调用.

也许我不是在解释这个问题,但这就是我对Git的理解.

收到后代码是两行:

#!/bin/sh
curl http://myserver.com:8080/hudson/job/myjobname/build?token=mytoken
Run Code Online (Sandbox Code Playgroud)

再一次,当我打开一个shell并运行它时,它可以工作,但是当有人推动它时,没有任何反应,直到一分钟或更短的时间过去,Hudson意识到Git已经改变,然后它就会构建.

我很乐意澄清是否需要.任何帮助是极大的赞赏.

编辑:玩了之后,我觉得也许后续接收没有执行,因为参考没有被更新的东西?git文档说

在更新所有引用后,它将在远程存储库上执行一次.

这是否意味着如果没有更新,它将不会执行?如果是这样,我很确定事情正在更新,所以它不应该适用.

这是我的过程:在本地进行编辑.提交编辑.从我的HEAD推送到名为'mybranch'的远程分支(不是主分支,已检出)这是我希望我的钩子执行的点.

小智 11

请检查您的文件是否具有可执行权限.否则无法执行.类似的东西rwxr-xr-x应该足够了.

您可以添加缺少的位

$ chmod +x /path/to/post-receive
Run Code Online (Sandbox Code Playgroud)


Arr*_*ter 5

您使用什么传输方法来推送回购?

挂钩仅在使用ssh和http的cgi实现等"智能"传输协议时执行.对于其他'哑'传输协议,如ftp,rsync和旧的http实现,挂钩永远不会被执行.我假设git协议会执行钩子,但推翻该协议从未被认为是一个好主意.


spa*_*nky 3

所有这些答案都很有用,但事实证明我需要 PATH 变量中的 git 的“bin”目录。我只有“cmd”目录。添加c:\my_path_to_git\git\bin到 PATH 并且工作正常。我通过反复试验并查看 apache 错误日志找到了这个答案。感谢大家的帮助!