Cz⼯具集使⽤介绍-规范Git提交说明
在多⼈协作的项⽬中,如果Git的提交说明精准,在后期协作以及Bug处理时会变得有据可查,项⽬的开发可以根据规范的提交说明快速⽣成开发⽇志,从⽽⽅便开发者或⽤户追踪项⽬的开发信息和功能特性。
本⽂主要内容:
介绍符合(需要)的提交说明
介绍提交说明⼯具集(适配器、校验以及⽇志)的使⽤⽅法
介绍供开发者快速⽣成项⽬cz⼯具集的Vue CLI 3插件
这⾥提供演⽰项⽬地址:。
Git的提交说明
Git每次提交代码的时候都需要⼿写提交说明(Commit message):
git commit -m "hello world"
复制代码
书写多⾏可以使⽤以下命令:
git commit
复制代码
此时会跳出⼀个⽂本编辑器,可以在⽂本编辑器中书写多⾏提交说明:
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch master
# Your branch is up to date with 'origin/master'.
#
# Changes to be committed:
# new file: package.json
#
G:/git-lab/cz/.git/COMMIT_EDITMSG [unix] (19:49 24/01/2019)
复制代码
如果没有规范的提交说明,很难阐述当前代码的提交性质(修复Bug、代码性能优化、新增功能或者发布版本等)。查看Vue项⽬的Git提交说明(fix表明修复问题、feat表明新增功能...),它完全符合Angular规范:
⼿写符合规范的提交说明很难避免错误,可以借助⼯具来实现规范的提交说明。
规范的Git提交说明
提供更多的历史信息,⽅便快速浏览
可以过滤某些commit,便于筛选代码review
可以追踪commit⽣成更新⽇志
可以关联issues
Git提交说明结构
Git提交说明可分为三个部分:Header、Body和Footer。
<Header> <Body> <Footer>
复制代码
Header
Header部分包括三个字段type(必需)、scope(可选)和subject(必需)。
<type>(<scope>): <subject>
复制代码
Vue源码的提交说明省略了scope。
type
type⽤于说明 commit 的提交性质。
值描述
feat新增⼀个功能
fix修复⼀个Bug
docs⽂档变更
style代码格式(不影响功能,例如空格、分号等格式修正)
refactor代码重构
perf改善性能
test测试
build变更项⽬构建或外部依赖(例如scopes: webpack、gulp、npm等)
ci更改持续集成软件的配置⽂件和package中的scripts命令,例如scopes: Travis, Circle等
chore变更构建流程或辅助⼯具
revert代码回退
scope
scope说明commit影响的范围。scope依据项⽬⽽定,例如在业务项⽬中可以依据菜单或者功能模块划分,如果是组件库开发,则可以依据组件划分。
提⽰:scope可以省略。
subject
subject是commit的简短描述。
Body
commit的详细描述,说明代码提交的详细说明。
Footer
如果代码的提交是不兼容变更或关闭缺陷,则Footer必需,否则可以省略。
不兼容变更
当前代码与上⼀个版本不兼容,则Footer以BREAKING CHANGE开头,后⾯是对变动的描述、以及变动的理由和迁移⽅法。
关闭缺陷
如果当前提交是针对特定的issue,那么可以在Footer部分填写需要关闭的单个 issue 或⼀系列issues。
angular安装Commitizen
是⼀个可以实现规范的提交说明的⼯具:
When you commit with Commitizen, you'll be prompted to fill out any required commit fields at commit time. No more waiting until later for a git commit hook to run and reject your commit (though that can still be helpful). No more digging through CONTRIBUTING.md to find what the preferred format is. Get instant feedback on your commit message formatting and be prompted for required fields.
提供选择的提交信息类别,快速⽣成提交说明。安装cz⼯具:
npm install -g commitizen
复制代码
Commitizen适配器
cz-conventional-changelog
如果需要在项⽬中使⽤commitizen⽣成符合AngularJS规范的提交说明,初始化cz-conventional-changelog适配器:
commitizen init cz-conventional-changelog --save --save-exact
复制代码
如果当前已经有其他适配器被使⽤,则会报以下错误,此时可以加上--force选项进⾏再次初始化
Error: A previous adapter is already configured. Use --force to override
复制代码
初始化命令主要进⾏了3件事情
1. 在项⽬中安装cz-conventional-changelog 适配器依赖
2. 将适配器依赖保存到package.json的devDependencies字段信息
3. 在package.json中新增configmitizen字段信息,主要⽤于配置cz⼯具的适配器路径:
"devDependencies": {
"cz-conventional-changelog": "^2.1.0"
},
"config": {
"commitizen": {
"path": "./node_modules/cz-conventional-changelog"
}
}
复制代码
接下来可以使⽤cz的命令git cz代替git commit进⾏提交说明:
代码提交到远程的Github后,可以在相应的项⽬中进⾏查看,例如(这⾥使⽤feat不是很合适,只是⼀个⽰例):
cz-customizable
如果想定制项⽬的提交说明,可以使⽤适配器:
Suitable for large teams working with multiple projects with their own commit scopes. When you specify the scopes in your .cz-config.js, cz-customizable allows you to select the pre-defined scopes. No more spelling mistakes embarrassing you when generating the changelog file.
安装适配器
npm install cz-customizable --save-dev
将之前符合Angular规范的cz-conventional-changelog适配器路径改成cz-customizable适配器路径:
"devDependencies": {
"cz-customizable": "^5.3.0"
},
"config": {
"commitizen": {
"path": "node_modules/cz-customizable"
}
}
复制代码
cz-customizable will first look for a file called .cz-config.js,alternatively add a config block in your package.json。
官⽅提供了⼀个.cz-config.js⽰例⽂件,如下所⽰:
'use strict';
types: [
{value: 'feat', name: 'feat: A new feature'},
{value: 'fix', name: 'fix: A bug fix'},
{value: 'docs', name: 'docs: Documentation only changes'},
{value: 'style', name: 'style: Changes that do not affect the meaning of the code\n (white-space, formatting, missing semi-colons, etc)'}, {value: 'refactor', name: 'refactor: A code change that neither fixes a bug nor adds a feature'},
{value: 'perf', name: 'perf: A code change that improves performance'},
{value: 'test', name: 'test: Adding missing tests'},
{value: 'chore', name: 'chore: Changes to the build process or auxiliary tools\n and libraries such as documentation generation'},
{value: 'revert', name: 'revert: Revert to a commit'},
{value: 'WIP', name: 'WIP: Work in progress'}
],
scopes: [
{name: 'accounts'},
{name: 'admin'},
{name: 'exampleScope'},
{name: 'changeMe'}
],
// it needs to match the value for field type. Eg.: 'fix'
/*
scopeOverrides: {
fix: [
{name: 'merge'},
{name: 'style'},
{name: 'e2eTest'},
{name: 'unitTest'}
]
},
*/
// override the messages, defaults are as follows
messages: {
type: 'Select the type of change that you\'re committing:',
scope: '\nDenote the SCOPE of this change (optional):',
// used if allowCustomScopes is true
customScope: 'Denote the SCOPE of this change:',
subject: 'Write a SHORT, IMPERATIVE tense description of the change:\n',
body: 'Provide a LONGER description of the change (optional). Use "|" to break new line:\n',
breaking: 'List any BREAKING CHANGES (optional):\n',
footer: 'List any ISSUES CLOSED by this change (optional). E.g.: #31, #34:\n',
confirmCommit: 'Are you sure you want to proceed with the commit above?'
},
allowCustomScopes: true,
allowBreakingChanges: ['feat', 'fix'],
// limit subject length
subjectLimit: 100
};
复制代码
这⾥对其进⾏处理(只是为了说明定制说明的⼀个⽰例):
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论