Git设置全局hooks规范化客户端提交日志记录
背景:
项目由于git进行管控,对commit的日志需要进行规范化输出,git的hooks默认管控单仓库,在.git/hooks里面,默认关闭,如果启用的话将后缀.sample去掉。系统提供的commit检验是git文本的最后是否有空格,根据规定,需要进行规则自定义,实现项目提交记录如:
1.增加:..功能;(xxx-xxx)
2.修改:..功能;(xxx-xxx)
3.解决:..问题;(xxx-xxx)
4.删除:删除某部分代码或资源文件的过程;(xxx-xxx)
5.备注:说明一个过程或者需要阐述某个阶段的变化内容;(xxx-xxx)
6.优化:在逻辑或者设计结构上进行代码优化或者规范化的调整;(xxx-xxx)
一、创建脚本
1、commit-regulars
^[0-9].增加:..*;\(.*-.*\)$
^[0-9].解决:..*;\(.*-.*\)$
^[0-9].备注:..*;\(.*-.*\)$
^[0-9].优化:..*;\(.*-.*\)$
^[0-9].修改:..*;\(.*-.*\)$
^[0-9].删除:..*;\(.*-.*\)$
这个脚本主要为自定义的政策匹配规则
2、commit-msg
#!/bin/sh
fileName=$1
message=$(<$fileName)
# 提交内容的正则表达式文件名,一行一个正则
regularFileName=".git/hooks/commit-regulars"
success=0
echo $message
while IFS='' read -r line || [[ -n "$line" ]]; do
line=$(echo $line | tr -d '\r')
if [[ $message =~ $line ]]; then
success=1
break
fi
done < $regularFileName
if [ "$success" == "0" ]; then
echo 你本次版本提交不符合日志提交规范. >&2
echo 1.日志中每一点描述都以序号做开头如 "1." 做开头并递增. >&2
echo 2.日志中不要包含全角的中文标点符号. >&2
echo 3.日志每个描述结束以半角符号 ";" 分号做结束符. >&2
echo 4.必须在JIRA系统上建立对应的问题点,JIRA 系统上的问题点在日志中要以问题点的编号做结尾并两端加括. >&2
echo 请补充日志说明信息后再提交代码,例如: >&2
echo 1.增加:..功能;新增代码或者调整原始SDK代码实现某需求的过程. >&2
echo 2.修改:..功能;当某个需求功能还在继续完善的过程. >&2
echo 3.解决:..问题;当接受到问题 BUG 反馈后进行修复的过程. >&2
echo 4.删除:删除某部分代码或资源文件的过程. >&2
echo 5.备注:说明一个过程或者需要阐述某个阶段的变化内容. >&2
echo 6.优化:在逻辑或者设计结构上进行代码优化或者规范化的调整. >&2
echo *******************禁止空格数据***************** >&2
exit 1
fi
此脚本为在客户端执行commit后进行commit的日志格式化匹配。
将这两个脚本文件放到本地项目的.git/hooks中,该项目每次提交后即可完成日志记录的约束。不过此方法仅适用于单项目,那么是否可以进行一次设置,该客户端下的所有有效呢,请看如下。
二、全局设置commit-msg的hooks
1、创建文件夹:
mkdir -p ~/.git_template/hooks
该指令会在c盘用户目录下创建目录.git_template/hooks,如果不熟悉指令的也可手工进行创建文件夹。
2、将一中的两个脚本文件放入创建好的文件夹中
3、设置全局配置
git config --global init.templatedir ~/.git_template
如上三步完成后即可在创建新的使用git管理的项目的时候自动将全局模版拷贝至项目根目录/.git/目录下,如果完成如上三步后需要对已经存在对git项目使用该模版,可移动至目标项目根目录并执行git init即可。
参考文章:
https://git-scm.com/docs/git-config.html
https://git-scm.com/book/en/v2