【前端】代码Git提交规范之限制非规范化提交信息

需求背景

在我们目前的前端项目中,我们采用 git 作为版本控制工具。使用 git 管理项目意味着我们经常需要提交代码。当我们执行 git commit -m "描述信息" 命令时,我们被要求提供一个描述信息。现在使用约定式规范提交,和Commitizen简化提交流程,但是如果出现人就是不遵守规则该怎么办呢?

解决方案

为了确保团队成员遵循约定式提交规范,可以设置Git钩子(hook)来限制非规范化的提交。例如,可以创建一个pre-commit钩子,当检测到提交信息不符合规范时,阻止提交并提醒开发者使用git cz

Git hooks(git 钩子)就是指git 在执行某个事件之前或之后进行一些其他额外的操作。我们现在用到的只有两个:

Git Hook 调用时机 说明
pre-commit git commit执行前 它不接受任何参数,并且在获取提交日志消息并进行提交之前被调用。脚本git commit以非零状态退出会导致命令在创建提交之前中止。 可以用git commit --no-verify绕过
commit-msg git commit执行前 可用于将消息规范化为某种项目标准格式。 还可用于在检查消息文件后拒绝提交。 可以用git commit --no-verify绕过

翻译成大白话就是:

  • commit-msg:可以用来规范化标准格式,并且可以按需指定是否要拒绝本次提交
  • pre-commit:会在提交前被调用,并且可以按需指定是否要拒绝本次提交

以下是如何实现这一目标的步骤:

1、安装Husky,Husky是一个流行的Git钩子工具,它可以帮助你在提交或推送代码之前运行自定义脚本:

bash 复制代码
npm install husky --save-dev

2、安装Commitlint,Commitlint是一个帮助检查Git提交信息是否符合约定的工具:

bash 复制代码
npm install --save-dev @commitlint/config-conventional @commitlint/cli

3、在项目根目录下创建或编辑commitlint.config.js文件,配置提交信息的规则,配置项内容可以参考:config-conventional 默认配置

JavaScript 复制代码
module.exports = {
      extends: ['@commitlint/config-conventional'], // 继承的规则
      rules: { // 定义规则类型
        'type-enum': [ // type 类型定义,表示 git 提交的 type 必须在以下类型范围内
          2, // 当前验证的错误级别,2-表示错误级别的错误
          'always',
          [ // 泛型内容
            'feat', // 新功能 feature
            'fix', // 修复 bug
            'docs', // 文档注释
            'style', // 代码格式(不影响代码运行的变动)
            'refactor', // 重构(既不增加新功能,也不是修复bug)
            'perf', // 性能优化
            'test', // 增加测试
            'chore', // 构建过程或辅助工具的变动
            'revert', // 回退
            'build' // 打包
          ]
        ],
        'subject-case': [0] // subject 大小写不做校验
      }
    }

注意:确保保存为 UTF-8 的编码格式,否则可能会出现错误

4、启动 hooks , 生成 .husky 文件夹

bash 复制代码
npx husky install

5、在 package.json 中添加 prepare 指令

bash 复制代码
npm pkg set scripts.prepare="husky install"

6、执行 prepare 指令

arduino 复制代码
npm run prepare

7、执行成功,提示

8、在.husky目录下,编辑commit-msg钩子文件,使用Commitlint来检查提交信息。

sh 复制代码
#!/usr/bin/env sh
npx --no-install commitlint --edit "$1"

7、此时, 不符合规范的 commit 将不再可提交

8、这不得扣几个工钱,让大家长长记性。确保团队成员了解这些新规则,并知道如何使用git cz来规范化提交信息。

相关推荐
Kapaseker3 分钟前
前端已死...了吗
android·前端·javascript
m0_471199637 分钟前
【自动化】前端开发,如何将 Jenkins 与 Gitee 结合实现自动化的持续集成(构建)和持续部署(发布)
前端·gitee·自动化·jenkins
w***95498 分钟前
spring-boot-starter和spring-boot-starter-web的关联
前端
Moment12 分钟前
富文本编辑器技术选型,到底是 Prosemirror 还是 Tiptap 好 ❓❓❓
前端·javascript·面试
xkxnq17 分钟前
第二阶段:Vue 组件化开发(第 18天)
前端·javascript·vue.js
就叫飞六吧17 分钟前
git提取当前分支指定文件历史版本
git
数字游民952718 分钟前
网站备案全流程回放(腾讯云)
人工智能·git·github·腾讯云·网站备案·waytoopc
晓得迷路了18 分钟前
栗子前端技术周刊第 112 期 - Rspack 1.7、2025 JS 新星榜单、HTML 状态调查...
前端·javascript·html
怕浪猫21 分钟前
React从入门到出门 第五章 React Router 配置与原理初探
前端·javascript·react.js
jinmo_C++21 分钟前
从零开始学前端 · HTML 基础篇(一):认识 HTML 与页面结构
前端·html·状态模式