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、将一中的两个脚本文件放入创建好的文件夹中

Git设置全局hooks规范化客户端提交日志记录

 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