乐趣区

关于git:你的代码提交友好吗

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 适配器:

<!—->

# 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

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

  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/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,会反复执行。

全局装置

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

全局装置 commitizencz-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 的博客

退出移动版