一、背景与意义
在项目开发过程中,有些开发人员有时提交git时注释写得很随意,不方便日后管理和问题回溯。对于JavaScript项目,可以使用husky和fabric规范git提交的注释。
二、引入git注释检查
在JavaScript项目中,安装husky和fabric:
bash
npm install husky @umijs/fabric --save-dev
然后初始化husky:
bash
npx husky install
运行上面的命令之后,会生成一个 .husky 目录,在 .husky 目录下创建一个commit-msg文件,其内容如下:
bash
#!/usr/bin/env sh
# Export Git hook params
export GIT_PARAMS=$*
npx --no-install fabric verify-commit
然后使用git命令执行代码提交:
bash
git add .
git commit -m 'test'
执行上述命令时,得到的输出如下:

显然,git注释规范已经生效。如果是按照规范的注释提交:
bash
git commit -m 'feat: 引入husky与fabric对git注释做规范'
则可以提交成功。
三、解决代码合并时报错的问题
在合并代码时,其自动生成的注释并不符合规范,无法通过校验。
假设当前是master分支,我们创建一个新的分支:
bash
git checkout -b new_branch1
然后随便添加一个提交:
bash
echo '' > test.txt
git add .
git commit -m 'feat: first commit in new_branch1'
然后再切回原来的分支,添加一个提交:
bash
git checkout master
echo '' > test2.txt
git add .
git commit -m 'feat: first commit in master'
接下来,如果做分支合并:
bash
git merge new_branch1
将会报错: 
为解决这个问题,需要在 .husky 目录下创建文件 prepare-commit-msg,其内容如下:
bash
#!/bin/sh
case "$2" in
merge)
MERGING_BRANCH_SHA=$(cat ".git/MERGE_HEAD")
MERGING_BRANCH_NAME=$(git name-rev --name-only "$MERGING_BRANCH_SHA")
MERGE_TARGET=$(git rev-parse --abbrev-ref HEAD)
cat > "$1" <<EOF
feat: 合并分支,将 "${MERGING_BRANCH_NAME}" 分支的内容合并到 "${MERGE_TARGET}" 分支
EOF
;;
esac
接下来 git merge new_branch1 执行时就不会报错,合并代码时,自动生成的注释为:
feat: 合并分支,将 "new_branch1" 分支的内容合并到 "master" 分支