共计 3045 个字符,预计需要花费 8 分钟才能阅读完成。
Git 是目前世界上最先进的分布式版本控制系统,而针对 Git 代码提交,咱们个别对于记录形容怎么操作的呢?当我是个初入行的码农时,我心愿你管我怎么提交,个别就几个字,我性能实现即可,例如:
git commit -m "调整批改"
当我开始变为资深码农,并且开始治理整个我的项目的代码品质以及标准时,看着年轻人提交的代码,你这都是个啥,啥叫 调整批改
。正如咱们看着本人当年写的代码,充斥狐疑,这居然是我写的?
玩笑归玩笑,规范化的提交真是一个好习惯,在工作中一份清晰简介标准的 Commit Message 能让后续代码审查、信息查找、版本回退都更加高效牢靠。
那么,快捷工具来了,commitizen/cz-cli。
Commit Message 规范
规范蕴含 Header
,Body
,Footer
三个局部.
<type>(<scope>): <subject>
// ...
<body>
// ...
<footer>
其中,Header 是必须的,Body 和 Footer 非必须。
- Header
Header 局部只有一行,包含三个字段:type(必须)、scope(可选)、subject(必须)
- type:用于阐明类型。可分以下几种类型
- scope:用于阐明影响的范畴,比方数据层、管制层、视图层等等。
- subject:主题,简短形容。一行
类型 | 形容 |
---|---|
feat | 新性能 |
fix | 修复 bug |
docs | 仅蕴含文档的批改 |
style | 款式及格式化变动,不影响代码逻辑。比方革除多余空白,删除分号等 |
refactor | 重构,既不新增性能,也不波及批改 bug 的代码改变 |
perf | 进步性能的批改 |
test | 增加或批改测试代码 |
build | 构建工具或内部依赖包的批改。比方更新依赖包等 |
ci | 继续化集成配置文件或脚本批改 |
chore | 杂项。其它不批改源码与测试代码的批改 |
revert | 撤销某次提交 |
- Body
对 subject 更具体的形容。
- Footer
次要是对于 issue 的关联。
装置
官网意思验证了 Node.js 12,14,16 版本的 Node,而我在 18 上无任何问题。
在本例中,咱们将设置存储库以应用 AngularJS 的提交音讯约定,也称为 traditional-changelog。还有其余适配器,例如cz-customizable
。
- 首先,确保全局装置 Commitizen CLI 工具:
<!—->
npm install commitizen -g
- 接下来,在我的项目中通过输出以下命令初始化以应用
cz-conventional-changelog
适配器:
<!—->
# npm
commitizen init cz-conventional-changelog --save-dev --save-exact
# yarn
commitizen init cz-conventional-changelog --yarn --dev --exact
# pnpm
commitizen init cz-conventional-changelog --pnpm --save-dev --save-exact
** 请留神:** 如果要在曾经配置过的我的项目外面笼罩装置,则能够利用强制参数--force
。还要理解其它详细信息,只需运行。commitizen help
下面的命令都干了什么呢:
- 装置了
cz-conventional-changelog
适配器模块 - 将下载配置保留到了
package.json
- 将适配器配置也写入了
package.json
<!—->
...
"config": {
"commitizen": {"path": "cz-conventional-changelog"}
}
针对下面第三点适配器配置,你也能够建设一个 .czrc
文件,写入:
{"path": "cz-conventional-changelog"}
-
应用
当咱们提交代码时,就能够将
git commit
命令替换成git cz
, 或者别名cz
,git-cz
等等。
[扩大]在我的项目中本地装置
上边咱们的操作其实能够看到,针对的是本人电脑本地我的项目,那么如果是多人我的项目,咱们必定心愿每个人都能应用同样的标准,那么能够将命令集成到我的项目中,那么咱们就不能全局装置了:
npm install --save-dev commitizen
在 npm 5.2+ 上,能够应用 npx 初始化适配器:
npx commitizen init cz-conventional-changelog --save-dev --save-exact
对于以前版本的 npm(< 5.2), 应用我的项目外部命令即可:
./node_modules/.bin/commitizen init cz-conventional-changelog --save-dev --save-exact
而后,您能够在 package.json
文件中增加命令:
...
"scripts": {"commit": "cz"}
这对所有我的项目应用人员比拟统一化,如果他们想进行提交,他们须要做的就是运行npm run commit
[扩大]通过 git commit
强制提交
针对我的项目管理者,咱们定了一个标准,然而没法指望他人会严格遵守,所以如何应用 git 挂钩和命令行选项将 Commitizen 合并到现有工作流中。这对我的项目维护者很有用,确保对不相熟 Commitizen 的人的奉献强制执行正确的提交格局。
首先确保咱们是采纳我的项目中本地集成装置了commitizen
,而后能够选取以下两种形式之一.
办法一:传统的 git hooks
针对本人应用,批改以下文件:.git/hooks/prepare-commit-msg
#!/bin/bash
exec < /dev/tty && node_modules/.bin/cz --hook || true
** 留神:** 如果 prepare-commit-msg
文件是新建的,须要执行权限chmod 777 .git/hooks/prepare-commit-msg
, 否则:
办法二:husky
对于多用户,咱们也能够借助 husky 来对立提交:
1. 装置 husky
npm install husky -D
2. 初始化 husky 配置
npm pkg set scripts.prepare="husky install"
npm run prepare
3. 增加脚本,咱们这边针对提交触发
npx husky add .husky/prepare-commit-msg "exec < /dev/tty && node_modules/.bin/cz --hook || true"
** 疑难:**commitizen 文档对于 husky 举荐利用 package.json\` 增加 husky 配置,然而我这边不起作用,后边钻研一下起因。
** 留神:** 肯定谨慎同时配置 husky 和本地 git hooks,会反复执行。
全局装置
咱们开发过程中,其实针对每个我的项目初始化适配器,不太敌对,其实还能够全局配置。
全局装置 commitizen
和cz-conventional-changelog
:
npm install -g commitizen
npm install -g cz-conventional-changelog
用户目录下创立配置文件(Mac 下,Linux 下同理):
echo '{"path":"cz-conventional-changelog"}' > ~/.czrc
我的项目和全局都配置了适配器,将先以本地为主。
VS CODE
vs code 中能够应用 git-commit-plugin
插件,这里不过多扩大了。
拜访原文
你的代码提交敌对吗?| DLLCNX 的博客