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
# 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
#
作者:leohxj
链接:https://zhuanlan.zhihu.com/p/34223150
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
起因
知乎上有个问题: 如何写好 Git commit log? 很有意思, 能看到各种提交风格: 有用 emoji 的, 有用唐诗的, 有用随机生成的. 风格没有对错, 只要能够体现出 commit 所做的修改即可.
但是最让我印象深刻的是 @李华桥 的答案:
本文就顺着这个方向, 给大家介绍下如何保障项目 commit message 的规范和格式化.
Commit Message 格式
目前规范使用较多的是 Angular 团队的规范, 继而衍生了 Conventional Commits specification. 很多工具也是基于此规范, 它的 message 格式如下:
我们通过 git commit 命令带出的 vim 界面填写的最终结果应该类似如上这个结构, 大致分为三个部分(使用空行分割):
分别由如下部分构成:
这样一个符合规范的 commit message, 就好像是一份邮件.
git commit 模板
如果你只是个人的项目, 或者想尝试一下这样的规范格式, 那么你可以为 git 设置 commit template, 每次 git commit 的时候在 vim 中带出, 时刻提醒自己:
修改 ~/.gitconfig, 添加:
新建 ~/.gitmessage 内容可以如下:
Commitizen: 替代你的 git commit
我们的目标还是要通过工具生成和约束, 那么现在就开始吧.
commitizen/cz-cli, 我们需要借助它提供的 git cz 命令替代我们的 git commit 命令, 帮助我们生成符合规范的 commit message.
除此之外, 我们还需要为 commitizen 指定一个 Adapter 比如: cz-conventional-changelog (一个符合 Angular团队规范的 preset). 使得 commitizen 按照我们指定的规范帮助我们生成 commit message.
全局安装
主要, 全局模式下, 需要 ~/.czrc 配置文件, 为 commitizen 指定 Adapter.
项目级安装
package.json中配置:
如果全局安装过 commitizen, 那么在对应的项目中执行 git cz or npm run commit 都可以.
效果如下:
自定义 Adapter
也许 Angular 的那套规范我们不习惯, 那么可以通过指定 Adapter cz-customizable 指定一套符合自己团队的规范.
全局 或 项目级别安装:
修改 .czrc 或 package.json 中的 config 为:
同时在~/ 或项目目录下创建 .cz-config.js 文件, 维护你想要的格式: 比如我的配置文件: leohxj/.cz-config
效果如下:
Commitlint: 校验你的 message
commitlint: 可以帮助我们 lint commit messages, 如果我们提交的不符合指向的规范, 直接拒绝提交, 比较狠.
同样的, 它也需要一份校验的配置, 这里推荐 @commitlint/config-conventional (符合 Angular团队规范).
安装:
同时需要在项目目录下创建配置文件 .commitlintrc.js, 写入:
针对自定义的 Adapter 进行 Lint
如果你像我一样, 使用的是自定义的 commitizen adapter, 那么你需要:
.commitlintrc.js 中写入:
结合 Husky
校验 commit message 的最佳方式是结合 git hook, 所以需要配合 Husky.
package.json 中添加:
效果如下:
standard-version: 自动生成 CHANGELOG
通过以上工具的帮助, 我们的工程 commit message 应该是符合 Angular团队那套, 这样也便于我们借助 standard-version 这样的工具, 自动生成 CHANGELOG, 甚至是 语义化的版本号(Semantic Version).
安装使用:
package.json 配置:
PS: standard-version 有很多其他的特性, 这里不过多涉及, 有兴趣的同学自行尝试.
最后
commit message 的规范性很重要, 但是是否需要像本文这样强制限制, 每个团队和个人都有自己的想法, 但是个人认为: 好的习惯, 受益终身.
转载:https://zhuanlan.zhihu.com/p/34223150
The text was updated successfully, but these errors were encountered: