1.commit-message标准必要性
- 对立格局的提交记录,更清晰和易读
- 能够通过提交记录来理解本次提交的目标,更好的CR和重构
- 更容易理解变更,定位和发现问题
- 每个提交形容都是通过思考的,改善提交品质
- 生成变更记录
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.js
或husky.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