Git 钩子未触发。

3
我已经在本地 Windows PC 上安装了 Git,并且一切都运行得很完美;我已经配置好了 Jenkins 和 Phing 来自动化我的构建和测试流程,但是最后一步是在 Git 中提交代码后自动触发构建。
我尝试将 post-commit 添加到本地仓库的 .git/hooks 目录中,内容如下:
curl http://localhost:8198/git/notifyCommit?url=c:\scm\myProject

如果我直接从命令行运行此命令,Jenkins会成功启动作业,但当我提交时它不会触发。
此外,我尝试将https://github.com/MestreLion/git-tools/blob/master/git-restore-mtime中的脚本添加到名为post-checkout的主存储库中的钩子目录中,以便在克隆时将提交时间添加为文件修改时间。这也没有触发。
我需要在git或我的存储库中执行特定操作以允许钩子触发吗?如果没有,有没有特定的地方可以开始故障排除?
2个回答

4

我需要在git或我的仓库中做特定的事情来使钩子生效吗?

主要包括:

  • 确保钩子是可执行的(chmod 775 .git/hooks/post-commit,Windows上实际上不需要)
  • 确保 "curl" 在 %PATH% 中(如果您的 <c:\path\to\git>\bin 在该路径中,则是这种情况)
  • 确保您的命令行测试使用了与Git一起的curl软件包,而不是像GoW Gnu on Windows(如果您已安装GoW)一样的另一个curl软件包
  • 在您的post-commit脚本开头添加#!/bin/sh(因为它将由msys bash执行)
  • 名称必须是post-commit(区分大小写,无扩展名如.sh.bat

这篇文章提到了一个关于 curl 参数缺少引号的问题
这是因为它在 msys bash 会话中被调用,适用于shell quoting规则。
我会确保 '\' 字符不被解释。请参见 "哪种引号方法可以保护哪些字符?":

双引号("...")会保护除双引号、反斜杠、美元符号和反引号之外的所有内容,直到下一个双引号。
反斜杠可以用来保护双引号(")、反斜杠(\)、美元符号($)或换行符,在双引号内使用。
反斜杠和换行符成对出现时会完全消失;单独出现的反斜杠会被当做字面量处理,除非它之后跟着 "\$、或换行符。

在您的情况下,我会使用:

curl "http://localhost:8198/git/notifyCommit?url=c:\\scm\\myProject"

谢谢VonC,两个钩子都是可执行的。在Windows上,我已经将两者的安全性设置为允许“每个人”拥有“完全控制”。 - Jordan Windebank
@JordanWindebank 好的,我提出的其他建议有用吗? - VonC
谢谢提供额外的信息。结果我在 curl 语句中有一个错误,需要在 URL 周围添加引号。现在它可以正常工作了。至于 post-checkout,结果与我的预期不同,但是我已经能够让它触发。再次感谢。 - Jordan Windebank

2
原来我需要在URL周围加上引号才能使它设置正确的本地路径:
curl "http://localhost:8198/git/notifyCommit?url=c:\scm\myProject"

现在它按照预期工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接