Git 提交规范(二、使用husky控制git hook)

在多人协作的开发项目中,保持一致的提交规范至关重要。这不仅能让项目历史清晰易读,还能避免因为不规范提交信息带来的混乱。

Git提交规范(一、使用commitizen)

继上篇文章介绍了如何通过 commitizen 设置快捷的 commit 规范后,本篇将进一步深入,使用 HuskyCommitlint 强制 Git 提交信息的规范化,确保团队成员在提交代码时遵循统一的规则。

通过 husky 控制 Git hooks,我们可以拦截不符合规范的提交操作,使得提交信息的格式保持一致性和规范性,提升团队协作效率和代码管理质量。


所需插件

本次教程需要使用以下两个插件:

  • commitlint:用于检查提交信息是否符合预定的规范。
  • husky:拦截 Git hooks 的工具,强制执行提交规范。

1. 安装必要的依赖

首先,我们需要安装 commitlintcommitlint 的配置文件。打开终端并运行以下命令:

npm install --save-dev @commitlint/config-conventional @commitlint/cli

安装完成后,项目的 package.json 文件会更新,并且会有相关依赖的记录:

安装 commitlint


2. 创建 commitlint.config.js 文件

为了配置 commitlint 的校验规则,我们需要在项目根目录下创建 commitlint.config.js 文件。该文件用于定义提交信息的规范。

创建步骤:

  1. 在项目根目录下,新建一个 commitlint.config.js 文件。
  2. 在文件中添加以下代码:
module.exports = {
    // 继承的规则,采用官方推荐的规范
    extends: ['@commitlint/config-conventional'],
    // 自定义规则
    rules: {
        // 提交类型必须符合下列类型之一
        'type-enum': [
            2,
            'always', [
                'feat', // 新功能
                'fix', // 修复 bug
                'docs', // 文档变更
                'style', // 代码格式修改,不影响逻辑
                'refactor', // 代码重构,无功能或 bug 修复
                'perf', // 性能优化
                'test', // 添加测试
                'chore', // 构建工具或其他依赖变动
                'revert', // 回滚操作
                'build', // 构建打包相关
            ],
        ],
        // 允许提交的 message 忽略大小写
        'subject-case': [0],
    },
}

创建 commitlint.config.js

规则说明:

  • type-enum:规定了提交信息中的类型(如 featfix 等)必须符合指定的类型列表。你可以根据实际项目的需求修改此列表。
  • subject-case:禁用对提交主题的大小写检查,提升灵活性。

注意:这里的提交类型规则最好与 commitizen 中的规范保持一致,以避免冲突。


3. 安装 Husky

Husky 是一个用于拦截和控制 Git hooks 的工具,它可以在 commitpush 等操作时,执行特定的检查或命令。

安装命令:

npm install husky --save-dev

安装完成后,项目的 package.json 会更新,显示 husky 作为开发依赖:

安装 husky


4. 启动 Git hooks

安装 husky 后,需要初始化 Git hooks,以便能够在 commit 时调用 commitlint 来检查提交信息。

启动命令:

npx husky install

执行完该命令后,项目目录下将自动生成一个 .husky 文件夹,用于存放 Git hooks 脚本:

生成 husky 文件夹


5. 配置 prepare 指令

为了确保 husky 能在每次安装依赖时自动配置 hooks,我们需要在 package.json 中添加 prepare 脚本。

设置命令:

npm set-script prepare "husky install"

手动运行 prepare 指令:

npm run prepare

执行完这一步,prepare 脚本将在每次运行 npm install 时自动执行,确保 husky 正常启用。

运行 prepare 脚本


6. 将 commitlint 添加到 Husky hook

接下来,我们将 commitlint 添加到 huskycommit-msg hook 中,这样每次提交时,commitlint 都会检查提交信息的格式。

添加命令:

npx husky add .husky/commit-msg 'npx --no-install commitlint --edit "$1"'

执行后,.husky/commit-msg 文件将被自动创建,内容如下:

#!/bin/sh
. "$(dirname "$0")/_/husky.sh"

npx --no-install commitlint --edit "$1"

添加 commitlint hook


7. 测试提交信息规范

现在我们来验证一下提交规范是否生效。首先执行 git add . 将文件添加到暂存区,然后尝试提交一个不符合规范的提交信息。

测试步骤:

  1. 执行 git add .
  2. 尝试提交不符合规范的信息:
    git commit -m "随便提交一个东西看看?"
    

此时,提交将被拦截,commitlint 会提示提交信息不符合规定的格式:

提交失败提示

只有符合提交规范的信息才会通过检查并成功提交。


总结

通过 commitlinthusky 的组合,我们可以在团队开发中有效控制提交信息的规范性,避免出现随意、不清晰的提交备注,从而保持 Git 历史的可读性和一致性。本文详细介绍了如何安装和配置这两个工具,并通过具体步骤说明如何强制规范提交信息。

核心步骤回顾:

  1. 安装 commitlinthusky 依赖。
  2. 在项目根目录创建 commitlint.config.js 文件,配置提交规范。
  3. 使用 husky 初始化 Git hooks。
  4. commitlint 集成到 Git 的 commit-msg hook 中。
  5. 进行测试,确保不规范的提交信息被拦截。

通过这些步骤,你可以为团队中的每位开发者设定统一的提交规范,提升项目的可维护性和开发效率。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐