Jira issue number in git commit message
在我们公司,我们正在从svn转向git。
对于问题跟踪,我们使用Atlassian的JIRA。
现在我们要强制每个提交消息都包含一个发行号(就像我们对svn所做的一样)。
我们发现了commit-msg钩子,如果它不包含发行号,我们可以使用它来拒绝提交。
JIRA使用Fisheye扫描git repo。 如果提交消息中包含问题编号,则更改将显示在该问题下方。
问题是克隆git存储库时不会复制钩子。 因此,不会强制落实提交消息中的发行号。 这意味着当向上游推送新提交时,Jira可能不会列出问题下的更改。
问题是; 我们是否以某种错误的方式使用了Git,是否有任何方法可以在提交消息中真正实施问题编号? 还是只有一个人拥有完成此任务的脚本/钩子(而不是commit-msg钩子)?
我使用了git-jira-hook并将其修改为我的需要,它也应该对您有用。为了满足您的需要,只需删除它登录到Jira的部分,以检查从提交消息中重新指定的jira问题编号是否有效。如果您不喜欢python(git-jira-hook用python编写)并且喜欢bash,则应该能够使每个存储库.git / hooks目录中的示例脚本适应您的需求。
至于实现对所有人都有用的东西,您想使用git-jira-hook作为上游存储库上的"更新"钩子。这将阻止包含缺少正确的jira问题引用的提交消息的推送。由于在提交时(而不是在推送时)获取有关缺少问题参考的反馈更加方便,因此您需要让开发人员将git-jira-hook安装为他们的commit-msg钩子。稍后我将解释如何在全球范围内完成此操作。
这是我解决此问题的方法:
专用回购commit-msg钩子:
我修改了git-jira-hook以检查我们使用的符号中的jira问题引用。然后,我向钩子发送了电子邮件,并向所有人发送说明,以解释如何在全局范围内安装该钩子,如本SO问题中所述。如果您全局安装该挂钩,则它将在以后的所有克隆中使用,并且可以使用git init轻松应用于已克隆的存储库。
上游回购更新挂钩:
我使用已经修改过的git-jira-hook脚本并将其安装在我们的每个存储库中。我无法在上游存储库上使用交互式身份验证位(将其符号链接),因此我创建了一个受限权限的Jira用户并将其身份验证硬编码到脚本中。
如果您正在使用npm,则可以将https://github.com/typicode/husky与https://github.com/marionebl/commitlint一起使用
创建文件:commitlint.config.js
1 2 3 4 5 6 7 8 9 | module.exports = { rules: { 'references-empty': [2, 'never'] }, parserPreset: { parserOpts: { issuePrefixes: ['REF-'] } }}; |
并在package.json中为钩子添加配置
commit-msg:commitlint -E HUSKY_GIT_PARAMS
您也可以具有服务器端挂钩,pre-receive-hook之类的东西,但是如果您习惯使用github,这并不明显。
失败的话,我可能会考虑提供"安装挂钩"构建选项(作为rake任务,make任务等),尽管那样会使我感到有点"肮脏",因为现在我的构建已与版本控制系统绑定在一起...
如果您在.git文件夹中使用默认挂钩,那么您在其中所做的更改将不会被索引,这仅意味着它们无法检出或克隆。
您可以将您的commit-message钩子移到另一个名为" hooks"的文件夹中并进行提交,以便覆盖.git中的默认钩子。
如果提交中不包含问题编号,则我们将显示一个错误消息框,以便用户在不需要问题跟踪编号的情况下仍可以继续操作(适用于补丁程序/修补程序)
有一个附加组件:JIRA的提交策略插件!
它不仅检查JIRA问题密钥是否"正式"包含在消息中,还检查相应的问题是否与JQL查询匹配。使用此功能,您有多种可能性,仅允许检查某些问题类型,某些状态的问题,当前Scrum冲刺中的问题,针对下一版本的问题等等。
另外,它还可以与原始版本(Subversion)和目标版本控制系统(Git)配合使用,即使在过渡期间也可以控制您的工作。
您可以将钩子脚本安装到有福的仓库和任何分支上。不幸的是,在使用Git克隆仓库时,钩子脚本没有被克隆,但是我们目前正在研究解决方法。
完整文档:http://www.midori-global.com/products/jira-commit-policy-plugin/documentation/
免责声明:这是JIRA商业上受支持的附加组件,我是一名正在开发它的开发人员。