使用husky和fabric规范git提交的注释

一、背景与意义

在项目开发过程中,有些开发人员有时提交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" 分支

相关推荐
程序员黑豆1 小时前
鸿蒙应用开发:V1与V2版本数据持久化实战教程
前端·harmonyos
小月土星5 小时前
React Router 前端路由深度解析:从传统后端路由到现代 SPA 的完整演进
前端
程序员黑豆5 小时前
鸿蒙开发 Navigation 路由教程:从入门到实战
前端·harmonyos
有梦不弃5 小时前
模块化单体架构设计方案:DDD + 六边形架构落地实践
后端·架构
用户938515635077 小时前
从零理解 React Router v6:每一个 API 都是怎么工作的
前端·javascript·全栈
用户059540174469 小时前
Redis缓存回滚踩坑实录:一个配置失误,让我在凌晨3点丢了3000条数据
前端·css
江南十四行10 小时前
Spring框架核心(上)——IoC控制反转与DI依赖注入详解
java·后端·spring
kyriewen10 小时前
别再这样写条件渲染了——你的React组件里藏着这5种定时炸弹
前端·javascript·react.js
IT_陈寒10 小时前
Redis缓存击穿把我坑惨了,原来这样设过期时间才靠谱
前端·人工智能·后端
用户9385156350710 小时前
从"坐电梯"到"前端路由"——深入理解 Hash 路由原理
前端·typescript·全栈