Git 是目前世界上最先进的分布式版本控制系统,而针对Git代码提交,咱们个别对于记录形容怎么操作的呢?当我是个初入行的码农时,我心愿你管我怎么提交,个别就几个字,我性能实现即可,例如:

git commit -m "调整批改"

当我开始变为资深码农,并且开始治理整个我的项目的代码品质以及标准时,看着年轻人提交的代码,你这都是个啥,啥叫调整批改。正如咱们看着本人当年写的代码,充斥狐疑,这居然是我写的?

玩笑归玩笑,规范化的提交真是一个好习惯,在工作中一份清晰简介标准的 Commit Message 能让后续代码审查、信息查找、版本回退都更加高效牢靠。

那么,快捷工具来了,commitizen/cz-cli。

Commit Message规范

规范蕴含HeaderBodyFooter三个局部.

<type>(<scope>): <subject>// ...<body>// ...<footer>

其中,Header 是必须的,Body 和 Footer 非必须。

  1. Header
    Header 局部只有一行,包含三个字段:type(必须)、scope(可选)、subject(必须)
  • type:用于阐明类型。可分以下几种类型
  • scope:用于阐明影响的范畴,比方数据层、管制层、视图层等等。
  • subject:主题,简短形容。一行
类型形容
feat新性能
fix修复bug
docs仅蕴含文档的批改
style款式及格式化变动,不影响代码逻辑。比方革除多余空白,删除分号等
refactor重构,既不新增性能,也不波及批改bug的代码改变
perf进步性能的批改
test增加或批改测试代码
build构建工具或内部依赖包的批改。比方更新依赖包等
ci继续化集成配置文件或脚本批改
chore杂项。其它不批改源码与测试代码的批改
revert撤销某次提交
  1. Body

对 subject 更具体的形容。

  1. Footer

次要是对于issue的关联。

装置

官网意思验证了Node.js 12,14,16版本的Node,而我在18上无任何问题。

在本例中,咱们将设置存储库以应用 AngularJS 的提交音讯约定,也称为 traditional-changelog。还有其余适配器,例如cz-customizable

  1. 首先,确保全局装置 Commitizen CLI 工具:

<!---->

npm install commitizen -g
  1. 接下来,在我的项目中通过输出以下命令初始化以应用cz-conventional-changelog适配器:

<!---->

# npmcommitizen init cz-conventional-changelog --save-dev --save-exact# yarncommitizen init cz-conventional-changelog --yarn --dev --exact# pnpmcommitizen init cz-conventional-changelog --pnpm --save-dev --save-exact

**请留神:**如果要在曾经配置过的我的项目外面笼罩装置,则能够利用强制参数--force。还要理解其它详细信息,只需运行 。commitizen help

下面的命令都干了什么呢:

  1. 装置了cz-conventional-changelog适配器模块
  2. 将下载配置保留到了package.json
  3. 将适配器配置也写入了package.json

<!---->

...  "config": {    "commitizen": {      "path": "cz-conventional-changelog"    }  }

针对下面第三点适配器配置,你也能够建设一个.czrc文件,写入:

{  "path": "cz-conventional-changelog"}
  1. 应用

    当咱们提交代码时,就能够将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/bashexec < /dev/tty && node_modules/.bin/cz --hook || true

**留神:**如果prepare-commit-msg文件是新建的,须要执行权限chmod 777 .git/hooks/prepare-commit-msg,否则:

办法二:husky

对于多用户,咱们也能够借助husky来对立提交:

1. 装置huskynpm install husky -D2. 初始化husky配置npm pkg set scripts.prepare="husky install"npm run prepare3. 增加脚本,咱们这边针对提交触发npx husky add .husky/prepare-commit-msg "exec < /dev/tty && node_modules/.bin/cz --hook || true"

**疑难:**commitizen文档对于husky举荐利用package.json\`增加husky配置,然而我这边不起作用,后边钻研一下起因。

**留神:**肯定谨慎同时配置husky和本地git hooks,会反复执行。

全局装置

咱们开发过程中,其实针对每个我的项目初始化适配器,不太敌对,其实还能够全局配置。

全局装置commitizencz-conventional-changelog

npm install -g commitizennpm install -g cz-conventional-changelog

用户目录下创立配置文件(Mac下,Linux下同理):

echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc

我的项目和全局都配置了适配器,将先以本地为主。

VS CODE

vs code中能够应用git-commit-plugin 插件,这里不过多扩大了。

拜访原文

你的代码提交敌对吗? | DLLCNX的博客