约定式提交
基本概念
约定式提交是一种基于提交信息的轻量级约定. 它提供了一组简单规则来创建清晰的提交历史. 以便于我们能够快速查找信息,生成Changelog文件和编写自动化工具.
基本结构
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
<类型>[可选 范围]: <描述>
[可选 正文]
[可选 脚注]
工具推荐
commitizen/cz-cli
: github.com/commitizen/…
Commitizen (约定式提交Nodejs工具)
基本介绍
Node.js 工具,用于创建遵循约定式提交规范的提交信息。
安装commitizen
- 安装命令行工具
npm install -g commitizen
- 初始化
NPM Package
npm init -y
- 初始化
git
本地仓库
git cz
commitizen
详细配置(package.json)
{
// ... default values
"config": {
"commitizen": {
"path": "./node_modules/cz-conventional-changelog",
"disableScopeLowerCase": false,
"disableSubjectLowerCase": false,
"maxHeaderWidth": 100,
"maxLineWidth": 100,
"defaultType": "",
"defaultScope": "",
"defaultSubject": "",
"defaultBody": "",
"defaultIssues": "",
"types": {
...
"feat": {
"description": "A new feature",
"title": "Features"
},
...
}
}
}
// ...
}
commitizen
详细配置(环境变量)
CZ_TYPE = defaultType
CZ_SCOPE = defaultScope
CZ_SUBJECT = defaultSubject
CZ_BODY = defaultBody
CZ_MAX_HEADER_WIDTH = maxHeaderWidth
CZ_MAX_LINE_WIDTH = maxLineWidth
- 我们可以任选适配器安装,不仅限于以下两种.如果要覆盖掉先前的适配器请添加
--force
参数.
安装cz-conventional-changelog适配器
- 如果需要在项目中使用
commitizen
生成符合AngularJS
规范的提交说明,初始化cz-conventional-changelog
适配器
commitizen init cz-conventional-changelog --save --save-exact
- 初始化命令主要进行了3件事情
- 在项目中安装cz-conventional-changelog 适配器依赖
- 将适配器依赖保存到package.json的devDependencies字段信息
- 在package.json中新增config.commitizen字段信息,主要用于配置cz工具的适配器路径:
"devDependencies": {
"cz-conventional-changelog": "^2.1.0"
},
"config": {
"commitizen": {
// 1. 如果是绝对路径则默认基于 process.cwd()
// 2. 另外,也可以在指定的.czrc上配置,如:
// {
// "path": "cz-conventional-changelog"
// }
"path": "./node_modules/cz-conventional-changelog"
}
}
安装git-cz适配器
commitizen init git-cz --save-dev --save-exact
- 初始化命令主要进行了3件事情
- 在项目中安装git-cz适配器依赖
- 将适配器依赖保存到package.json的devDependencies字段信息
- 在package.json中新增config.commitizen字段信息,主要用于配置cz工具的适配器路径:
"devDependencies": {
"git-cz": "^4.7.6"
},
"config": {
"commitizen": {
"path": "./node_modules/git-cz"
}
}
- 参数对应
commit message
视图- 一条
commit message
信息由header
,body
,footer
组成. - 一个
header
又由type
和subject
组成,是提交消息的必要部分,被限制在50个字符以内.(强制) - 其他行应该在保持在72个字符以内.
scope
:commit 影响的范围,比如数据层、控制层、视图层等等.subject
:应该使用简洁的祈使句(动词原形,对人称,时态不敏感),结尾没有点(.).body
:应该包含改变的动机,以及将改变前后进行对比.breaking changes
: 破坏性变化footer
: 引用与此提交相关的任何任务的位置.
- 一条
<type>[(<scope>)]: <emoji> <subject>
[BLANK LINE]
[body]
[BLANK LINE]
[breaking changes]
[BLANK LINE]
[footer]
- 默认是交互式配置
- 执行非交互式配置
git-cz --non-interactive --type=feat --subject="add onClick prop to component"
# 可选参数
# --type
# --subject
# --scope
# --body
# --breaking
# --issues
# --lerna
- 禁用emoji
git-cz --disable-emoji
- 通过
changelog.config.js
生成模板配置模板
module.exports = {
"disableEmoji": false,
"list": [
"test",
"feat",
"fix",
"chore",
"docs",
"refactor",
"style",
"ci",
"perf"
],
"maxMessageLength": 64,
"minMessageLength": 3,
"questions": [
"type",
"scope",
"subject",
"body",
"breaking",
"issues",
"lerna"
],
"scopes": [],
"types": {
"chore": {
"description": "Build process or auxiliary tool changes",
"emoji": "🤖",
"value": "chore"
},
"ci": {
"description": "CI related changes",
"emoji": "🎡",
"value": "ci"
},
"docs": {
"description": "Documentation only changes",
"emoji": "✏️",
"value": "docs"
},
"feat": {
"description": "A new feature",
"emoji": "🎸",
"value": "feat"
},
"fix": {
"description": "A bug fix",
"emoji": "🐛",
"value": "fix"
},
"perf": {
"description": "A code change that improves performance",
"emoji": "⚡️",
"value": "perf"
},
"refactor": {
"description": "A code change that neither fixes a bug or adds a feature",
"emoji": "💡",
"value": "refactor"
},
"release": {
"description": "Create a release commit",
"emoji": "🏹",
"value": "release"
},
"style": {
"description": "Markup, white-space, formatting, missing semi-colons...",
"emoji": "💄",
"value": "style"
},
"test": {
"description": "Adding missing tests",
"emoji": "💍",
"value": "test"
}
}
};
使用
- 通过
git cz
替代git commit
git cz
常见提交类型说明
值 | 含义 |
---|---|
feat | 新增一个功能 |
fix | 修复一个Bug |
docs | 文档变更 |
style | 代码格式(不影响功能,例如空格、分号等格式修正) |
refactor | 代码重构 |
perf | 改善性能 |
test | 测试 |
build | 变更项目构建或外部依赖(例如scopes: webpack、gulp、npm等) |
ci | 更改持续集成软件的配置文件和package中的scripts命令,例如scopes: Travis, Circle等 |
chore | 变更构建流程或辅助工具 |
revert | 代码回退 |
Commitlint (Commit Message校验工具)
- 每次进行commit提交都会校验commit message,如果不通过就会拦截commit
- 安装命令行工具
npm install @commitlint/cli --save-dev
- 安装常用配置
npm install @commitlint/config-conventional --save-dev
- 安装git hooks工具.
npm install husky --save-dev
package.json
配置
"husky": {
"hooks": {
"commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
}
}
Standard-version (版本信息文档生成工具)
- 用以生成
CHANGLOG.md
文档
npm install standard-version --save-dev
npm scripts
配置
{
"scripts": {
"release": "standard-version"
}
}
- 可以在
package.json/.versionrc/.versionrc.json/.versionrc.js
中进行配置
{
"standard-version": {
"skip": {
"tag": true
}
}
}
相关连接
cz-customizable
自定义适配器: github.com/leoforfree/…gitflow
:github.com/dreidev/git…