使用git hook进行commit信息的修改

3,760 阅读2分钟

本文仅仅是简单的介绍如何使用git hook对commit信息进行修改。

为什么要写这个文章

在我们日常提交代码操作中,commit如果没有一个很好的规范的话,提交信息混乱,不能直接根据提交信息看出当前分之是feature还是release,尤其是前端,约束性本来就少,这样就需要我们更好的进行commit信息编写。

正文

git存在很多hook可以帮助我们进行一系列骚操作,当你clone一个git项目到本地的时候,项目根目录下面会有.git目录,可以通过终端进入这个目录

cd .git

查看.git目录下面的文件内容可以看到一个hooks的目录,这就是我们这次主要将的内容。

进入hooks目录可以看到许多的.sample文件,这些都是示例文件,是不会被执行的,去掉.sample后缀之后就可以变为可执行的shell文件。

客户端钩子(即你开发本地)包括:pre-commit、prepare-commit-msg、commit-msg、post-commit等,主要用于控制客户端git的提交工作流。

服务端钩子(push的远端):pre-receive、post-receive、update,主要在服务端接收提交对象时、推送到服务器之前调用。

本次主要介绍commit-msg

commit-msg主要就是修改commit的hook

cp commit-msg.sample commit-msg

将commit-msg.sample文件进行copy,进入commit-msg,

#!/bin/sh
# 获取当前分支名字
BRANCH_NAME=$(git symbolic-ref --short -q HEAD)
# 将分支名字按/进行分割
TEMP_ARR=(`echo $BRANCH_NAME | tr '/' ' '`)
# 获取到第一个元素
PRE_BRANCH=${TEMP_ARR[0]}
# 获取你输入的git commit 内容
ORIGIN_COMMIT=$(cat $1)
# 将分支信息和你的原始commit进行拼接
COMMIT="${PRE_BRANCH}: ${ORIGIN_COMMIT}"
# 输出commit信息
echo "$COMMIT" > "$1"

上面commit-msg文件的内容就是获取当前分支信息的特征,比如分支为feature/commit、release/commit、hotfix/commit,将把feature、release、hotfix自动拼接在你的commit前面,前提是你自己的分支比较规范(可以使用git flow进行项目的管理)。

当你修改修改完项目代码的时候,进行commit,最后生成的commit信息如下图所示:

可以很好的帮助我们完善commit信息。

结尾

当然上面讲的内容比较简单,大家感兴趣的话可以自己去实践修改commit玩玩,有很多可以挖掘的东西。

husky也是一个很好的用的npm包,可以结合eslint、tslint、prettier进行代码的格式化,前端代码可以在package.json里面添加配置。

关于commit的hook有个commitizen npm包,更好的有个交互界面,进行commit信息的完善。