Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git提交消息中的Jira问题编号_Git_Hook_Push_Jira_Issue Tracking - Fatal编程技术网

git提交消息中的Jira问题编号

git提交消息中的Jira问题编号,git,hook,push,jira,issue-tracking,Git,Hook,Push,Jira,Issue Tracking,在我们公司,我们正在从svn迁移到git。 对于问题跟踪,我们使用来自Atlassian的JIRA 现在,我们希望强制每个提交消息都包含一个问题编号(就像我们对svn所做的那样) 我们找到了commit-msg钩子,如果提交不包含问题编号,我们将使用它拒绝提交 JIRA使用Fisheye扫描git回购协议。如果提交消息包含问题编号,则更改将显示在该问题下 问题是在克隆git存储库时没有复制钩子。因此,提交消息中的问题编号不强制执行。这意味着,当一个新的提交被推到上游时,Jira可能不会列出某个问

在我们公司,我们正在从svn迁移到git。 对于问题跟踪,我们使用来自Atlassian的JIRA

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

我们找到了commit-msg钩子,如果提交不包含问题编号,我们将使用它拒绝提交

JIRA使用Fisheye扫描git回购协议。如果提交消息包含问题编号,则更改将显示在该问题下

问题是在克隆git存储库时没有复制钩子。因此,提交消息中的问题编号不强制执行。这意味着,当一个新的提交被推到上游时,Jira可能不会列出某个问题下的更改


问题是,;我们是否以错误的方式使用Git,是否有任何方法可以在提交消息中强制执行问题编号?或者是否有人仅仅拥有一个脚本/钩子(commit-msg钩子除外)来实现这一点

您也可以使用服务器端钩子、预接收钩子或其他东西,但是如果您习惯使用github,这一点并不明显

失败了,我可能会考虑提供一个“安装钩子”构建选项(作为RAKE任务、任务或其他任何东西),虽然这会让我觉得有点“脏”,因为现在我的构建与版本控制系统绑定…

< P>我使用并修改它以满足我的需要,这也适用于您。出于您的需要,只需删除它登录到Jira的部分,以检查提交消息中的Jira发行号regexed是否有效。如果您不喜欢python(git jira hook是用python编写的)并且更喜欢bash,那么您应该能够根据需要调整每个repo的.git/hooks目录中的示例脚本

至于实现对每个人都有效的东西,您希望使用git jira钩子作为上游回购的“更新”钩子。这将阻止包含缺少正确jira问题引用的提交消息的推送。由于在提交时(而不是推送时)更方便地获得关于缺少问题引用的反馈,因此您需要让开发人员安装git jira钩子作为提交消息钩子。稍后我将解释如何在全球范围内实现这一点

以下是我如何解决这个问题的:

  • 私有回购提交消息挂钩: 我修改了git-jira-hook,以检查我们使用的符号中的jira问题引用。然后,我通过电子邮件向每个人发送了钩子,并说明了如何在全球范围内安装钩子,如中所述。如果全局安装钩子,那么它将在将来的所有克隆中使用,并且可以使用git init轻松地应用于已经克隆的repo

  • 上游回购更新挂钩: 我使用了已经修改过的git-jira-hook脚本,并将其安装在我们的每个repo中。我无法在上游repo(symlinked it)上获得交互式身份验证位,因此我创建了一个受限权限Jira用户,并将其身份验证硬编码到脚本中


  • 有一个附加组件:

    它不仅检查JIRA问题密钥是否“正式”包含在消息中,还检查相应的问题是否与JQL查询匹配。使用它,您有多种可能性,只允许检查特定的问题类型、处于特定状态的问题、当前Scrum sprint中的问题、针对下一个版本的问题等等

    作为奖励,它可以与您的原始()和目标版本控制系统()一起工作,使您的工作即使在过渡期间也能得到控制

    您可以将钩子脚本安装到受祝福的repo和任何fork。不幸的是,当用Git克隆repo时,钩子脚本并没有被克隆,但我们目前正在研究解决方法

    完整文档:


    免责声明:这是JIRA的商业和受支持的附加组件,我是开发人员。

    如果您在.git文件夹中使用默认挂钩,那么您在其中所做的更改将不会被索引,这意味着无法签出或克隆

    您可以将提交消息钩子移动到另一个名为“hooks”的文件夹中并提交它,以便它覆盖.git中的默认钩子


    如果提交不包含问题编号,我们会将消息框显示为错误,以便用户在不需要问题跟踪器编号的情况下仍然可以继续操作(适用于修补程序/热修复程序)

    如果您使用的是npm,您可以使用

    创建文件:commitlint.config.js

    module.exports = {
    rules: {
        'references-empty': [2, 'never']
    },
    parserPreset: {
        parserOpts: {
            issuePrefixes: ['REF-']
        }
    }};
    
    并在package.json中添加钩子的配置

    commit-msg: commitlint -E HUSKY_GIT_PARAMS
    

    克隆存储库时不会复制Git钩子。我们建议使用。这有助于将git钩子发布给克隆repo的每个人


    强制git commit包含jira id引用。我已经在回购协议中配置了它。希望这能满足您的要求。

    基本上,我想要的是,如果提交消息没有问题号,则让源服务器拒绝本地存储库的推送。我确实找到了。但是它想要连接到JIRA服务器,这对于我想要的东西来说并不是必需的。仍然没有一个好的答案。有人有好的服务器端钩子吗?钩子必须在原点执行,也就是我们推到的地方。git jira钩子也有很多叉子,它们有一些有用的特性。如果你觉得git jira hook不够,我会检查一下forks,看看是否有你需要的功能。唯一需要注意的是带有WHATEVERREF-1的消息。我怎样才能修好它?