自动为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号。