关于hook:git提交消息中的Jira问题编号

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冲刺中的问题,针对下一版本的问题等等。

    enter image description here

    另外,它还可以与原始版本(Subversion)和目标版本控制系统(Git)配合使用,即使在过渡期间也可以控制您的工作。

    您可以将钩子脚本安装到有福的仓库和任何分支上。不幸的是,在使用Git克隆仓库时,钩子脚本没有被克隆,但是我们目前正在研究解决方法。

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

    免责声明:这是JIRA商业上受支持的附加组件,我是一名正在开发它的开发人员。