在Git提交信息中包含Jira问题编号

31

我们公司正在从svn迁移到git。我们使用Atlassian的JIRA进行问题跟踪。

现在,我们希望强制每个提交信息都包含一个问题号(就像我们在svn中做的那样)。

我们找到了commit-msg hook,用它来拒绝不包含问题号的提交。

JIRA使用Fisheye扫描git仓库。如果提交消息包含问题号,则更改将显示在该问题下方。

问题是,当克隆git仓库时,hook不会被复制。这意味着提交消息中的问题号并没有被强制执行。这意味着当新提交被推送到上游时,Jira可能不会在问题下列出更改。

问题是:我们是否以错误的方式使用Git,并且是否有任何方法可以真正强制执行提交消息中的问题号?还是是否有其他脚本/hook(除了commit-msg hook)可以实现这一点?


仍然没有一个好的答案。有人有一个好的服务器端钩子吗?该钩子必须在源上执行,即我们推送到的地方。 - meijuh
6个回答

16
我使用了git-jira-hook并根据我的需求进行了修改,这也适用于您的需求。对于您的需求,只需删除检查提交信息中的jira issue号是否有效并登录Jira的部分即可。如果您不喜欢python(git-jira-hook是用python编写的)并且更喜欢bash,您应该能够将每个存储库的示例脚本适应您的需求。
至于实现适用于所有人的功能,您需要在上游存储库上使用git-jira-hook作为“更新”挂钩。这将阻止包含缺少正确jira问题引用的提交消息的推送。由于在提交时获取有关缺少问题引用的反馈更方便(而不是在推送时),您需要让开发人员安装git-jira-hook作为其commit-msg hook。稍后我将解释如何全局执行此操作。
以下是我解决此问题的方法:
  1. 私人代码库提交信息钩子: 我修改了 git-jira-hook,以检查我们使用的符号中的 jira 问题引用。然后,我通过电子邮件发送了该钩子,并向每个人说明了如何全局安装钩子,就像这个 SO 问题中所解释的那样。如果您全局安装钩子,则它将在所有未来的克隆中使用,并且可以轻松地应用于已经克隆的代码库,使用 git init。

  2. 上游代码库更新钩子: 我使用已经修改过的 git-jira-hook 脚本,并将其安装到我们的每个代码库中。我无法在上游代码库上获取交互式身份验证部分(对其进行了符号链接),因此我创建了一个受限制权限的 Jira 用户,并将他们的身份验证硬编码到脚本中。


1
还有很多git-jira-hook的分支,它们具有一些有用的功能。如果你觉得git-jira-hook不够用,我建议你检查这些分支,看看是否有你需要的功能。 - Freerobots

8
如果你正在使用npm,可以使用https://github.com/typicode/huskyhttps://github.com/marionebl/commitlint。创建文件:commitlint.config.js。
module.exports = {
rules: {
    'references-empty': [2, 'never']
},
parserPreset: {
    parserOpts: {
        issuePrefixes: ['REF-']
    }
}};

并在 package.json 中为钩子添加配置

commit-msg: commitlint -E HUSKY_GIT_PARAMS

唯一的问题是带有 WHATEVERREF-1 的消息也会通过。我该如何修复它? - Bexultan Myrzatay

1

你也可以有服务器端的钩子,例如 pre-receive-hook 等等,但是如果你习惯于使用 Github 的话,这并不明显。

如果没有其他办法,我可能会考虑提供一个“install-hooks”构建选项(作为 rake 任务、make 任务或其他),尽管这会让我感到有点“肮脏”,因为现在我的构建与版本控制系统绑定在一起了...


基本上我想要的是,如果提交信息中没有问题编号,让具有源的服务器拒绝来自本地存储库的推送。 - meijuh
我找到了https://github.com/joyjit/git-jira-hook/blob/master/git-jira-hook。但它想要连接到JIRA服务器,这对于我想要的并不是必需的。 - meijuh

0
当克隆一个仓库时,Git钩子不会被复制。我们建议使用husky。这可以帮助将git钩子发布给克隆仓库的所有人。
为了强制要求包含Jira ID引用的git提交。我已经在一个仓库中进行了配置-husky-jira-demo。希望这能满足您的需求。

0

有一个适用于此的插件:JIRA Commit Policy Plugin

它不仅检查 JIRA 问题关键字是否“正式”包含在消息中,而且还检查相应的问题是否符合 JQL 查询。使用它,您可以拥有多种可能性,只允许针对某些问题类型进行检查,在特定状态下的问题,当前 Scrum 迭代中的问题,目标下一个版本的问题等等。

enter image description here

作为额外的福利,它可以同时与您的原始版本控制系统(Subversion)和目标版本控制系统(Git)一起使用,使您的工作在过渡期间得到控制。

您可以将钩子脚本安装到受保护的存储库和任何分支中。不幸的是,在使用Git克隆存储库时,钩子脚本不会被克隆,但我们正在研究解决此问题的方法。

完整文档:http://www.midori-global.com/products/jira-commit-policy-plugin/documentation/

声明:这是一个商业化和受支持的JIRA插件,我是其中的开发人员。


0
如果您在.git文件夹中使用默认的挂钩,则在其中进行的更改不会被索引,这意味着它们无法被检出或克隆。
您可以将提交消息挂钩移动到名为“hooks”的不同文件夹中,并提交它,以便覆盖来自.git的默认挂钩。
如果提交不包含问题号码,则我们会显示一个错误消息框,以便用户仍然可以继续操作,如果不需要具有问题跟踪器编号(适用于补丁/热修复情况)。

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