commitizen规范化提交

277 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天,点击查看活动详情

规范的提交说明

在Git提交代码时需要git commit -m xxx填写提交说明(Commit message),自己写的信息往往不够规范,而规范的Commit message可以极大增强提交说明的可读性。Commitizen就是一个撰写规范 Commit message 的工具。

Angular Commit 规范

目前,社区有多种 Commit message 的写法规范,其中Angular规范是目前使用最广的写法,比较合理和系统化,并且有配套的工具。

在Angular规范中,一次规范的提交分为三个部分,Header,Body和Footer。其中,Header 是必需的,Body 和 Footer 可以省略。

<type>(<scope>): <subject>
// 空一行
<body>
// 空一行
<footer>

Header部分

  • type用于说明 commit 的类别,只允许使用下面7个标识:
feat:新功能(feature)
fix:修补bug
docs:文档(documentation)
style: 格式(不影响代码运行的变动)
refactor:重构(即不是新增功能,也不是修改bug的代码变动)
test:增加测试
chore:构建过程或辅助工具的变动
  • scope 用来说明本次Commit影响的范围,即简要说明修改会涉及的部分,比如数据层、控制层、视图层等。
  • subject对这次提交做一个简短描述。

Body部分

Body 是对本次 commit 的详细描述,可以分成多行。

Footer部分

下面两种情况需要添加Footer:

  • 不兼容变动

如果当前代码与上一个版本不兼容,则 Footer 部分以BREAKING CHANGE开头,后面是对变动的描述、以及变动理由和迁移方法

  • 关闭 Issue

如果当前 commit 针对某个issue,那么可以在 Footer 部分关闭这个 issue (可依次关闭多个issueCloses #123, #245, #992)

commitizen使用

项目内使用

# 安装命令行工具
npm install commitizen -D
# 安装规范适配器,cz-conventional-changelog表示使用angular规范 
npx commitizen init cz-conventional-changelog --save-dev
# 调用git-cz命令执行提交
npx git-cz

commitizen init做了两件事情:

  1. 使用npm安装cz-conventional-changelog包
  2. 在package.json中添加了配置:
// 该配置告诉commitizen要require导入的adapter是什么
...
  "config": {
    "commitizen": {
      "path": "cz-conventional-changelog"
    }
  }

全局使用

# 安装命令行工具
npm install -g commitizen
# 安装规范适配器,cz-conventional-changelog表示使用angular规范 
npm install -g cz-conventional-changelog
# 添加adapter配置
echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc
# 调用git cz命令执行提交
git cz

git cz 为什么会生效?

当我们使用第二种方式全局安装commitizen,我们可以使用git cz命令而不是git-cz,为什么可以这么用呢?

这里面有一个小知识,只要在PATH路径中存在git-xxx命令,我们就可以通过git xxx来进行调用。