commitizen规范化git提交

685 阅读3分钟

近期在项目过程中,对git commit进行了规范化,参考了几篇文章之后,小小的总结一下

一、规范的commit信息

目前规范使用较多的是 Angular 团队的规范, 继而衍生了 Conventional Commits specification. 很多工具也是基于此规范, 它的 message 格式如下:

<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>

主要分为3个部分:

  • 标题行: 必填, 描述主要修改类型和内容
  • 主题内容: 描述为什么修改, 做了什么样的修改, 以及开发的思路等等
  • 页脚注释: 放 Breaking Changes 或 Closed Issues

1.1 type

type用于说明 commit 的提交性质

说明
feat 新增一个功能
fix 修复一个bug
docs 文档更新
style 代码格式更新(不影响功能,如空格、分号等格式修正)
refactor 代码重构
perf 改善性能
test 测试
build 变更项目构建或外部依赖(例如scopes: webpack、gulp、npm等)
ci 更改持续集成软件的配置文件和package中的scripts命令,例如scopes: Travis, Circle等
chore 变更构建流程或辅助工具
revert 代码回退

1.2 scope

scope说明commit影响的范围。scope依据项目而定,例如在业务项目中可以依据菜单或者功能模块划分,如果是组件库开发,则可以依据组件划分。

1.3 subject

subject是commit的简短描述。

1.4 Body

commit的详细描述,说明代码提交的详细说明。

1.5 Footer

一些备注, 通常是 BREAKING CHANGE 或修复的 bug 的链接.

二、Commitizen 替换 git commit

过去我们提交代码都是通过git commit 添加描述信息,为了规范化现在需要使用Commitizen进行替换。具体使用如下(主要以项目中使用场景为例进行说明):

  1. 安装commitizen:npm i -D commitizen,这时我们就可以通过npx git-cz来替换git commit -m"xxx"(在git add .之后)

2. 安装Commitizen适配器:npm i -D cz-conventional-changelog,并在pacakge.json中对commit信息模板进行配置

  "scripts": {
    "commit": "git-cz"
  },
  "config": {
    "commitizen": {
      "path": "node_modules/cz-conventional-changelog"
    }
  },

这样我们通过npm run commit进行提交,同时快捷选择规范的commit提交信息模板了

三、commitlint校验

上述步骤已经能够保证通过commitizen在提交代码的commit信息符合规范,但此时仍可以自行通过git commit -m提交代码,因此有必要通过其他手段进行进一步约束。

  1. 安装commitlint-cli,用来校验commit是否符合规范
$ npm i -D @commitlint/cli
  1. 安装@commitlint/config-conventional,一种符合Angular风格的校验规则
$ npm i -D @commitlint/config-conventional @commitlint/cli
  1. 在项目根目录简历配置文件 commitlint.config.js 或者 .commitlintrc.js
module.exports = {
    extends:[
        // 符合Angular团队规范的配置,与commitizen中配置的cz-conventional-changelog一致
        "@commitlint/config-conventional"
    ],
    rules: {
        // 自定义你的规则
    }
}
  1. 校验commit信息的最佳方式就是结合git hook,所以需要配合Husky使用,它可以在git提交的各个生命周期对你的操作进行一系列处理
npm i -D husky

// package.json 中配置git commit提交时的校验钩子
"husky": {
    "hooks": {
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
    }
  }

这样你再次通过git commit -m提交不规范的说明就会被拒绝了

四、自定义你的校验规则

目前这部分内容尚未实际操作过,想学习的话可以参考这篇文章

参考文章