自动为git commit message添加JIRA号
很多大企业都在用Atlassian全家桶,用JIRA/Confluence/Bitbucket强强组合进行敏捷开发。Bitbucket是Git在线代码管理仓库,若在Branch Name/Pull Request Title/Commit Message中包含JIRA中的Issue号,会自动出现对应JIRA页面的超链接,非常方便追踪问题。
在commit message中添加JIRA号可作为一个开发规范,但每次提交时都去写一遍Issue Number总感觉很费事,能否让其自动添加呢?
Git Hooks可实现以上需求。Hooks相当于一些系列基于Git事件的触发器,对于本需求而言,要实现的功能是提交前自动在commit message前面加上Issue号,不过前提是当前Branch Name以Issue Number开头。
需求对应的hook是prepare-commit-msg,放在.git/hooks目录下,以下代码仅供参考,且假定满足如下条件:
- Branch Name以Issue Nubmer开头
- Issue Number格式为GroupID-SerieNumber,比如G1234-98734,G1234对开发者而言固定
COMMIT_MSG_FILE=$1
COMMIT_SOURCE=$2
SHA1=$3
#COMMIT_MSG_FILE=' echo "$HOME/Desktop/Temp/temp_msg.txt'”
branch_name=$(git symbolic-ref --short HEAD)
commit_msg=$(cat $COMMIT_MSG_FILE)
# if original commit message contain "[g1234", just leave it as it is
if [[ ${commit_msg,,} == *"[g1234"* ]]; then
exit 0
fi
# if branch match G1234-xxx-xxxxxxxxx
if [[ $branch_name =~ ^[gG]1234[_-][0-9]+[_-].+ ]]; then
jira_comment=$(echo "$branch_name"|awk 'BEGIN {FS="-|_"} {printf "[%s-%s]: ",$1,$2}')
sed -i "1s/^/$jira_comment/" $COMMIT_MSG_FILE
# echo $jira_comment
# echo $COMMIT_MSG_FILE
fi
代码大致逻辑:
- 先获取Branch名,若以G1234-98734这样风格的字符开头,就截取之将其加入到commmit message中,格式为
[jira-number]: commit message; - 若commit message已符合上述格式,就直接退出,方便支持一个Branch对应多个JIRA的场景,此场景下可手动加入JIRA号。