公司里的运维团队的产品经理,那老六提出说要在每个提交带上的jira storyid或者bugid,不用他自己弄不顾他人麻烦,真想问候他的xx。不过既然已经成为定局,还是想想有没有其他办法。经一番调研,网上有比较零碎的信息,不系统,所以这里总结一下,分享给各位道友。由于本人是前端,所以方案更多地是站在前端的角度去写。
这里运维只校验提交信息的格式为:storyid或者bugid:提交信息,他们并没有限定bug一定要用bugid, 所以,我们通用之提交storyid,不用bugid, 看完后续方案,你就会明白,我为什么这么限定。
方案一、采用编辑器插件
我开发的编辑器是vscode,所以这里采用的是vscode 插件,这里经过测试,推荐的是Jira Commit Message 插件。我就不一步一步写怎么安装插件了,不会的自己百度一下。以下是这个插件文档翻译和用法:
简介:
这个插件自动从分支名中提取jira id , 附加到提交信息的前缀。
功能:
- 自动添加前缀:基于分支名,自动在提交信息中添加前缀
- 自定义模式: 允许自定义配置issue code 提取模式和提交信息格式.
- 过时前缀处理: 分支改变时,会自动检测并更新过时的前缀.
配置
通过 VSCode settings.json 进行配置:
- commitMessagePrefixPattern: 匹配分支名中 issue 前缀的正则,. 默认是 (ML-\d+)-.*.
- commitMessageFormat: 提交信息的格式. 使用 ${prefix} 作为前缀 , ${message} 作为原始提交信息,默认是 "[${prefix}] ${message}".
- gitHeadWatchInterval: 检测 .git/HEAD file 改变的时间间隔. 默认是 1000.
使用:
1、从上面的文档可以看出,这个插件是通过提取我们分支上的storyid,并自动给我们附带到提交信息上的。所以我们在分支命名的时候,带上storyid,如:feature/storyid/v1.0,这样就能提取到了。这也是我们开头写得为什么不用bugid的原因,分支名只有一个,不可能用bugid。(还要那老六也没要求bug一定要用bugid)。
2、通过上面配置中的commitMessagePrefixPattern配置匹配出storyid的正则,通过commitMessageFormat配置提交信息的格式。
3、写提交信息,并点下面按钮,即可自动附带上storyid
真感谢写出这插件的作者。
优点:
1、前端项目安装一次都能用
缺点:
1、跟浏览器相关,后端同学可能用不了
2、可能有的vscode使用这个插件时会报错
方案二、采用git hook 方式
这个方案其实思路跟方案一是一样的,都是在分支名里面提取storyid,所以我们分支名保持相同的形式。只不过提取和附带信息的过程处理放在prepare-commit-msg hook中。
在项目下找到 .git/hooks ,看看里面有没有prepare-commit-msg,没有的话新建,并拷贝下面代码,有的话将下面代码复制到合适的地方(不要影响原本hook的功能)
#!/bin/bash
# Get the current branch name
current_branch=`git rev-parse --abbrev-ref HEAD`
# Search Jira ID in a pattern such a "feature/ABCD-123-my-feature"
id=$(echo $current_branch | sed -nE 's,[a-z]+/([A-Z]+-[0-9]+)-.+,\1,p')
# Only prepend if an ID was found in the current branch
if [[ ! -z $id ]]; then
# $1 is the name of the file containing the commit message
# Prepend "ABCD-123: "
sed -i.bak -E "1s/^/${id}: /" $1
fi
写点信息,提交,你会发现,storyid自动附带上了,都不用像方案一一样,去点按钮。
优点:
1、前后端通用,没有编辑器限制
缺点:
1、写在项目下git hook,每个项目都必须搞一遍,且重新拉项目的时候又得重新重复一遍(可能有全局的设置方式,不过我没去调研,我其实在想,运维那帮人,是不是有手段可以在服务端设置)