git钩子应用之修改提交的commit信息

git使用钩子可以修改提交的commit信息,例如在提交的commit信息前加个前缀[修改文件数]

git hook

Git 能在特定的重要动作发生时触发自定义脚本。 有两组这样的钩子:客户端的和服务器端的。 客户端钩子由诸如提交和合并这样的操作所调用,而服务器端钩子作用于诸如接收被推送的提交这样的联网操作。 你可以随心所欲地运用这些钩子。

具体信息参考这里

使用钩子实现修改commit信息

我们要实现的功能是在提交commit信息后自动在commit信息前添加[修改文件数],即commit-msg 钩子。

commit-msg 钩子接收一个参数,此参数是存有当前提交信息的临时文件的路径。 如果该钩子脚本以非零值退出,Git 将放弃提交,因此,可以用来在提交通过前验证项目状态或提交信息。

将本地仓库下.git/hooks/ 文件夹下的commit-msg.sample重命名为commit-msg

1
mv commit-msg.sample commit-msg

在该文件添加如下shell内容

1
2
3
4
5
6
7
8
9
10
merge='Merge'
msg=$(cat $1)
if [[ "$msg" == *"$merge"* ]]; then
exit 0
else
num=$(git status | grep -E 'modified|deleted|new file|renamed' | wc -l | awk '{print $1}')
prefix=[修改文件数:${num}]
commit=${prefix}${msg}
echo "$commit" > "$1"
fi

注意,是添加,不是替换

该shell脚本的意思是如果commit信息中存在Merge,则按原commit信息提交,否则统计修改的文件数,添加前缀[修改文件数:${num}],${num} 为修改的文件数目

修改完成后,每次提交commit信息,就可以在commit信息中看到修改的文件数,十分方便,效果如下

总结

git 的钩子使用起来十分方便,可以使用shell脚本做很多事情,后面慢慢探索吧。

打赏

请我喝杯咖啡吧~

支付宝
微信