1.commit-message标准必要性

  1. 对立格局的提交记录,更清晰和易读
  2. 能够通过提交记录来理解本次提交的目标,更好的CR和重构
  3. 更容易理解变更,定位和发现问题
  4. 每个提交形容都是通过思考的,改善提交品质
  5. 生成变更记录

2.标准选型

通过commit-message标准评审,在业界罕用的:atom,eslint和Angular等标准中, 能够抉择最罕用的Angular标准作为咱们日常我的项目中的提交标准

3.Angular的Commit Message标准简介

每条提交记录蕴含三个局部:header,body和footer

<header> <BLANK LINE> <body> <BLANK LINE> <footer>

Commit Message Header

<type>(<scope>): <short summary>  │       │             │  │       │             └─⫸ Summary in present tense. Not capitalized. No period at the end.  │       │  │       └─⫸ Commit Scope: animations|bazel|benchpress|common|compiler|compiler-cli|core|  │                          elements|forms|http|language-service|localize|platform-browser|  │                          platform-browser-dynamic|platform-server|router|service-worker|  │                          upgrade|zone.js|packaging|changelog|dev-infra|docs-infra|migrations|  │                          ngcc|ve  │  └─⫸ Commit Type: build|ci|docs|feat|fix|perf|refactor|test

其中<type>和<summary>是必要的 <scope>是可选的

Type 必须是以下的类型

  • feat: 新增页面或性能
  • fix: bug修复
  • build: 影响构建零碎或内部依赖项的更改
  • ci: 对 CI 配置文件和脚本的更改
  • docs: 文档改变
  • perf: 性能晋升改变
  • refactor: 不影响性能的代码重构(既不修复谬误也不增加性能)
  • test: 增加或批改测试用例

Summary用来提供更改的简洁形容

4.标准施行

通过commitizen进行交互式提交,husky + commit-msg hook进行提交校验,cz-customizable来自定义交互提交流程和文案

1.应用commitizen工具,在commit时能够交互的形式抉择type

装置commitizen

npm i -D commitizen

package.json中增加对应的npm script

"commit":"cz"

改变增加到暂存区后执行commit提交

npm run commit

2. 通过husky在git hooks中对不符合规范的提交进行拦挡,拦挡commitlint进行校验

装置husky , commitlint 和 合乎angular提交标准的配置

npm i -D husky commitlint @commitlint/config-conventional

增加git hooks

npx husky install

package.json中增加prepare的npm hook, 在每次install主动执行(yarn v2+不反对prepare)

"prepare": "husky install"

执行增加commit-msg hook

如果应用husk v4.x版本(举荐降级到新版本),间接在package.json中或.huskyrc.json中新增commit-msg钩子即可

package.json

"husky": {        "hooks": {              "commit-msg": "commitlint --edit $1"            }  }

.huskyrc.huskyrc.json.huskyrc.jshusky.config.js

"hooks": {      "commit-msg": "commitlint --edit $1" }

如果应用husky v6+版本,须要增加对应的shell调用形式(husky v6对增加形式做了改变,所以无奈通过增加配置到package.json中运行)

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

增加commintlint配置(也能够放到package.json中指定)

echo "module.exports = { extends: ['@commitlint/config-conventional'] };" > commitlint.config.js

package.json中增加commitlint配置

"commitlint": {      "extends": [            "@commitlint/config-conventional"      ]}

3. 扩大和自定义标准

commitizen提供的交互式默认是英文的,如果改成中文或者对交互流程进行改变,能够应用cz-customizable进行扩大和自定义

装置cz-customizable

npm i -D cz-customizable

package.json中增加配置

"config": {        "commitizen": {              "path": "node_modules/cz-customizable"        },        "cz-customizable": {              "config": ".cz-config.js"        } } 

.cz-config.js就是cz-customizable配置的具体文件了,能够参考CZ-Config-Example并进行改变, 能够把文案翻译成中文,自定义批改提醒等。

也能够通过fork cz-customizable创立内封配置文件的npm包

npm i -D your-own-package
"config": {      "commitizen": {          "path": "node_modules/your-own-package"      } }

配置文件能够自定义交互内容,比方能够只保留type scope breakchange confirm

  • 抉择提交类型
  • 简略形容本次改变
  • 是否有重大变更
  • 确定提交

配置文件中设置skipQuestions: ['body','customScope','scope','footer'],即可疏忽其余选项

allowBreakingChanges: ['feat', 'fix'], 仅在feat和fix时提醒 breakchange

4.其余

通过npm script进行commit,如果eslint没有通过(在pre-commit 钩子中做了eslint检测),然而又想提交能够通过加'––'来向npm script传参

npm run commit -- --no-verify # or npm run commit -- -n