You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
More detailed explanatory text, if necessary. Wrap it to
about 72 characters or so.
Further paragraphs come after blank lines.
- Bullet points are okay, too
- Use a hanging indent
BREAKING CHANGE: isolate scope bindings definition has changed.
To migrate the code follow the example below:
Before:
scope: {
myAttr: 'attribute',
}
After:
scope: {
myAttr: '@',
}
The removed `inject` wasn't generaly useful for directives so there should be no code using it.
# head: <type>(<scope>): <subject># - type: feat, fix, docs, style, refactor, test, chore# - scope: can be empty (eg. if the change is a global or difficult to assign to a single component)# - subject: start with verb (such as 'change'), 50-character line## body: 72-character wrapped. This should answer:# * Why was this change necessary?# * How does it address the problem?# * Are there any side effects?## footer: # - Include a link to the ticket, if any.# - BREAKING CHANGE#
优雅的提交你的 Commit message
[TOC]
Commit message 是开发的日常操作, 写好 log 不仅有助于他人 review,还可以有效的输出 CHANGELOG,对项目的管理实际至关重要,但是实际工作中却常常被大家忽略。
希望通过本文,能够帮助大家重视和规范 Commit message 的书写。
一、起因
前段时间在做
zeus cli
的时候,经常浏览vue-cli
源码,不由被其 Commit message 所吸引,清晰明了,赏心悦目。于是就了解了一下,目前社区有多种 Commit message 的 书写规范。
vue-cli
采用的是 Angular 规范,也是目前使用最广的写法,比较合理和系统化,并且有配套的工具。二、Commit message 格式
每次提交,Commit message 都包括三个部分:Header,Body 和 Footer。
其中,Header 是必需的,Body 和 Footer 可以省略。
不管是哪一个部分,任何一行都不得超过72个字符。这是为了避免自动换行影响美观。
2.1 Header
Header 部分只有一行,包括三个字段:
type
(必需)、scope
(可选)和subject
(必需)。(1)type
type
用于说明 commit 的类别,只允许使用下面列表中的标识:(2)scope
scope
用于说明 commit 影响的范围,比如model、controller、view、route、component、utils等,视项目而定。(3)subject
subject
是 commit 目的的简短描述,不超过50个字符。2.2 Body
Body 部分时对本次 commit 的详细描述,可以分为多行。下面是一个范例。
More detailed explanatory text, if necessary. Wrap it to about 72 characters or so. Further paragraphs come after blank lines. - Bullet points are okay, too - Use a hanging indent
2.3 Footer
Footer 部分只用于两种情况。
(1)BREAKING CHANGE(不兼容变动)
如果当前代码与上一个版本不兼容,则 Footer 部分以
BREAKING CHANGE
开头,后面是对变动的描述、以及变动理由和迁移的方法。(2)关闭 Issue
如果当前 commit 针对某个 issue,那么可以在 Footer 部分关闭这个 issue。
Closes #234
也可以一次关闭多个 issue。
Closes #234, #123, #345
2.4 Revert
还有一种特殊情况,如果当前 commit 用于撤销以前的 commit,则必须以
revert
开头,后面跟着被撤销 Commit 的 Header。revert: feat(pencil): add 'graphiteWidth' option This reverts commit 667ecc1654a317a13331b17617d973392f415f02.
Body 部分的格式是固定的,必须写成
This reverts commit <hash>.
,其中的hash
是被撤销 commit 的 SHA 标识符。如果当前 commit 与被撤销的 commit,在同一个发布(release)里面,那么它们都不会出现在 Change log 里面。如果两者在不同的发布,那么当前 commit,会出现在 Change log 的
Reverts
小标题下面。三、项目集成
上面的规则对于未接触过的同学还是需要一些时间适应的,git commit 也是可以通过工具生成的。
3.1 Git commit 模版
当 commit message 一行不够时,可以执行
git commit
,就会跳出文本编辑器,让你写多行。而 git commit 模版就会在指令执行后出现。
修改
~/.gitconfig
(~
指系统根目录),添加:[commit] template = ~/.gitmessage
新建
~/.gitmessage
内容可以如下:实际操作:
3.1 使用 Commitizens 代替你的 git commit
通过工具生成 commit message。
commitzen/cz-cli,借助它提供的
git cz
命令代替git commit
命令,询问式的生成符合规范的 commit message。除此之外,我们还需要为 commitizen 指定一个 Adapter 比如:
cz-conventional-changelog
(一个符合 Angular 团队规范的 preset),使得 commitizen 按照我们指定的规范帮助我们生成 commit message。(1)全局安装
在全局模式下,新增
~/.csrc
配置文件,为 commitzens 指定 Adapter。(2)项目安装
package.json 中配置:
如果全局安装过 commitizen,那么在对应的项目中执行
git cz
或npm run ct
都可以。项目局部安装,无法使用
git cz
,可以使用npm run ct
,建议全局安装。效果如下:
(3)自定义 Adapter
也许 Angular 的那套规范我们不习惯, 那么可以通过指定 Adapter cz-customizable 指定一套符合自己团队的规范。
修改
~/.czrc
或 package.json 中的 config 为:同时在
~/
或项目目录下创建.cz-config.js
文件, 维护自定义格式。3.2 Commitlint 校验你的 message
上面是通过工具生成 commit message,当然我们还是可以通过:
这种方式直接提交。commitlint,可以辅助 lint commit message,如果提交的 message 不符合指向的规范,则不能提交代码。
安装:
同时需要在项目目录下创建配置文件
.commitlintrc.js
,写入:(1)针对自定义 Adapter 进行 Lint
如果使用自定义的
commitizen adapter
,那么你需要:.commitlintrc.js
中写入:3.3 Husky 集成
校验 commit message 的最佳方式是结合
git hook
,目前大前端主要有两种 git 钩子插件 husky(jQuery,babel,create-react-app,Next.js等在用) 和 pre-commit(antd等在用)。这里推荐
Husky
的原因:package.json 中添加
效果如下:
3.4 Standard-version:自动生成 CHANGELOG
通过以上工具的帮助, 我们的工程 commit message 应该是符合 Angular 团队那套, 这样也便于我们借助 standard-version 这样的工具, 自动生成 CHANGELOG。
安装使用:
package.json 配置:
standard-version 有许多其他的特性,详情请看官网介绍。
效果如下:
会在项目根目录下生成一个
CHANGELOG.md
的文件,如下所示:以上图片为测试数据。
建议将
feat
,fix
,以及BREAKING CHANGE
放在 changelog 中。其他情况(docs
、chore
、style
、refactor
、test
),具体视项目而定,建议不要。四、最后
这样一个符合规范的 commit message,就好像一封邮件。关于 commit message 每个团队和个人都有自己的想法,个人认为:好的习惯,受益终身。
The text was updated successfully, but these errors were encountered: