在我们公司,我们正从svn转向git。 对于问题跟踪,我们使用Atlassian的JIRA。
现在我们要强制每条提交消息都包含一个问题编号(就像我们使用svn一样)。
我们发现了commit-msg钩子,如果它不包含问题编号,我们会用它来拒绝提交。
JIRA使用Fisheye扫描git repo。如果提交消息包含问题编号,则更改将显示在该问题下。
问题是克隆git存储库时不会复制钩子。因此,不会强制执行提交消息中的问题编号。这意味着当向上推送新提交时,Jira可能不会列出问题下的更改。
问题是;我们以某种方式以错误的方式使用Git并且有没有办法在提交消息中真正强制执行问题编号?或者是否有任何人只有一个脚本/钩子(除了commit-msg钩子)来完成这个?
答案 0 :(得分:14)
我使用了git-jira-hook并根据我的需要对其进行了修改,这也适用于您。根据您的需要,只需删除它登录Jira的部分,检查提交消息中的jira发布号是否有效。如果您不喜欢python(git-jira-hook是用python编写的)并且更喜欢bash,那么您应该能够根据需要调整每个repo的.git / hooks目录中的示例脚本。
至于实现适合每个人的东西,你想使用git-jira-hook作为上游回购的“更新”钩子。这将阻止包含缺少正确jira问题引用的提交消息的推送。由于在提交时(而不是在推送时)获取有关缺少问题引用的反馈更方便,因此您需要让开发人员安装git-jira-hook作为其commit-msg挂钩。我稍后会解释如何在全球范围内完成这项工作。
以下是我解决此问题的方法:
私有repo commit-msg钩子: 我修改了git-jira-hook来检查我们使用的符号中的jira问题引用。然后,我通过电子邮件发送了钩子,向每个人解释如何全局安装钩子,如this SO question中所述。如果你全局安装了钩子,那么它将在以后的所有克隆中使用,并且可以使用git init轻松应用于已经克隆的repos。
上游回购更新挂钩: 我使用了已修改的git-jira-hook脚本并将其安装在我们的每个repos中。我无法使用上游repo上的交互式身份验证位(符号链接),因此我创建了一个受限制的权限Jira用户并将其身份验证硬编码到脚本中。
答案 1 :(得分:5)
如果您使用的是npm,则可以将https://github.com/typicode/husky与https://github.com/marionebl/commitlint一起使用
创建文件:commitlint.config.js
string[] student = new string[6] { "Joules", "Niki", "Hannah","Ariana", "Martin", "Loren" };
int[] mark = new int[6] { 85, 65, 70, 75, 95, 80 };
Console.Write(student[0]);
student[0] = mark[0].ToString();
Console.WriteLine($"'s mark is {student[0]}");
并在package.json中添加钩子的配置
commit-msg:commitlint -E HUSKY_GIT_PARAMS
答案 2 :(得分:1)
你也可以拥有服务器端钩子,pre-receive-hook或者其他什么东西,但是如果你已经习惯了github,那就不明显了。
如果做不到这一点,我可能会考虑提供一个'install-hooks'构建选项(作为rake任务,make任务或其他任何东西),虽然这会让我觉得有点“脏”,因为现在我的构建与版本控制系统......
答案 3 :(得分:0)
有一个加载项:Commit Policy Plugin for JIRA!
它不仅检查JIRA问题密钥是否正式#34;包含在消息中,但也检查相应的问题是否与JQL查询匹配。使用此功能,您可以获得多种可能性,仅允许检查某些问题类型,某些状态中的问题,当前Scrum sprint中的问题,针对下一版本的问题等等。
作为奖励,它适用于您的原始版本(Subversion)和目标版本控制系统(Git),即使在过渡期间也可以控制您的工作。
您可以将钩子脚本安装到受祝福的仓库以及任何货叉。不幸的是,在使用Git克隆repo时没有克隆钩子脚本,但我们目前正在研究这方面的解决方法。
完整文档:http://www.midori-global.com/products/jira-commit-policy-plugin/documentation/
免责声明:这是JIRA的商业和受支持的附加组件,我是开发人员。
答案 4 :(得分:0)
如果您在.git文件夹中使用默认挂钩,那么您在其中所做的更改将不会被编入索引,这意味着它们无法检出或克隆。
您可以将提交消息挂钩移动到另一个名为' hooks'的文件夹中。并提交它,以便覆盖.git。
中的默认挂钩如果提交不包含问题编号,我们会将消息框显示为错误,这样如果用户不需要有问题跟踪器编号,用户仍然可以继续操作(适用于补丁/修补程序)
答案 5 :(得分:0)
克隆存储库时,不会复制Git挂钩。我们建议使用husky。这可以帮助向克隆存储库的每个人发布git钩子。
要强制git commit包含一个jira id引用。我已经在存储库-husky-jira-demo中配置了它。希望这可以解决您的要求。