Commitizen 是一个快速提交规范化提交信息的命令行工具,使得提交信息更加清晰、易于理解,并且符合规范。通过 Commitizen,开发者能够以一种结构化的方式填写提交信息,这使得阅读提交历史和跟踪变更更加方便。
Commitizen 本身并不是一个提交信息规范,而是一个工具,它与约定式提交规范(如 Conventional Commits 规范)结合使用。当开发者使用 Commitizen 进行提交时,它会引导开发者按照指定的格式填写提交信息,包括提交类型(如 feat, fix, docs, style, refactor, test, chore 等)、作用范围、简要描述等信息。
安装
bash
# 全局安装
npm install -g commitizen
# 项目安装
npm install --save-dev commitizen
如果工作在非友好型仓库/项目,可以通过安装 streamich/git-cz 使用
git cz
命令进行提交,其工作方式与git commit
相同。
友好型仓库/项目
在 Commitizen 中,友好型仓库/项目(Commitizen-friendly)指的是一个项目或仓库已经配置了 Commitizen,并且遵循了 Commitizen 提供的提交规范。
当一个项目被称为友好型仓库/项目时,意味着该项目的开发者可以使用 Commitizen 提供的交互式界面来生成符合规范的 Git 提交信息。这样做的好处是,所有的提交都将按照统一的格式进行,并且包含必要的信息,如类型、作用域、描述等。这样的提交信息更易于阅读和理解,有助于团队成员之间的沟通和协作。
Commitizen 中的适配器
在 Commitizen 中,适配器是指用于与具体提交规范相匹配的插件或配置。Commitizen 本身提供了一种通用的提交信息格式规范,但不同的项目或团队可能有不同的提交规范要求,这时就需要使用适配器来定制化 Commitizen 的行为。
最常用的适配器之一是 cz-conventional-changelog,它与 Angular 团队的提交信息规范 兼容,并且被广泛应用于许多开源项目和企业内部的代码仓库中。
同时,作者基于 cz-conventional-changelog 制作的简体中文版适配器 cz-conventional-chanagelog-zh-cn 已经发布至 npmjs。
配置友好型仓库/项目
配置英文适配器:
bash
# npm
npx commitizen init cz-conventional-changelog --save-dev --save-exact
# yarn
npx commitizen init cz-conventional-changelog --yarn --dev --exact
# pnpm
npx commitizen init cz-conventional-changelog --pnpm --save-dev --save-exact
简体中文版仅需将 cz-conventional-changelog 替换为 cz-conventional-changelog-zh-cn:
bash
# npm
npx commitizen init cz-conventional-changelog-zh-cn --save-dev --save-exact
# yarn
npx commitizen init cz-conventional-changelog-zh-cn --yarn --dev --exact
# pnpm
npx commitizen init cz-conventional-changelog-zh-cn --pnpm --save-dev --save-exact
**注意:**如果正在使用类似
husky
的precommit
钩子,需要将脚本命名为"commit"
(例如"cm": "cz"
)以外的名称。原因在于 npm 脚本具有一个特性,即它会自动运行名称为 prexxx 的脚本,其中 xxx 是另一个脚本的名称。实质上,如果你将脚本命名为
"commit"
,npm 和 husky 将会运行precommit
脚本两次,解决方法是防止 npm 触发的precommit
脚本。
运行
使用 npx
方式运行:
bash
npx cz
使用 package.json
脚本的方式运行:
bash
npm pkg set scripts.commit="cz"
或将下面内容加入 package.json
:
json
"scripts": {
"commit": "cz"
}
然后执行 npm run commit
。
多仓库/项目模板化
作为多个仓库/项目的维护者,可能希望为所有这些项目统一采用相同的提交信息格式或者适配器。可以创建自己的 Node 模块,从而实现这一目标。参考 Commitizen for multi-repo projects 指南。
同时作者在 npmjs 发布了通用的 cz-conventional-template-zh-cn 模块,该模块可应用于多仓库/项目(multi-repo)的简体中文模板 ,目前作者的所有项目全部都基于此模板进行规范化提交。
- 内部集成 cz-conventional-changelog-zh-cn 适配器,完全兼容 Angular 团队的提交信息规范标准。
- 集成 commitizen,无需另行下载额外配置。
- 通用简体中文模板,统一标准服务多(单)仓库/项目。
安装与运行
bash
# 创建项目目录
mkdir my-project
# 初始化 git
git init
# 初始化 nodejs 项目
npm init
# 以开发依赖方式安装 cz-conventional-template-zh-cn
npm install --save-dev cz-conventional-template-zh-cn
# 添加运行脚本
npm pkg set scripts.commit="cz-zh-cn"
# ... 执行 git add 添加待提交文件后
# 运行命令提交 git
npm run commit
更多
- 在
git commit
上运行 Commitizen,参考 Optional: Running Commitizen ongit commit
。 - 将 Commitizen 当作全局工具,参考 Conventional commit messages as a global utility。
- 更多规范适配器,参考 Adapters。