cz-git 使用小技巧 —— 让 git commit 从此不再麻烦
什么是 commitizen : 基于Node.js的 git commit 命令行工具,辅助生成标准化规范化的 commit message。
什么是 adapter(适配器) : 更换 commitizen 命令行工具的交互方式插件。
今天总算完成了 cz-git 的文档:http://cz-git.qbenben.com/ ,欢迎各位查看使用
下面我来介绍一下使用 cz-git 的一些小技巧
scopes
在commit message当中通常scopes
代表着本次涉及到的范围,这里的范围通常有两种:
- 项目代码层面 比如你使用
yarn
配合lerna
或 使用pnpm
管理的 monorepo - 项目业务层面 比如 (account)账号系统相关,(comment)评论系统相关...
项目代码层面
如果你是使用 monorepo
的 packages
作为scopes,你可以这样定义
// .commitlintrc.js
const fs = require('fs')
const path = require('path')
const packages = fs.readdirSync(path.resolve(__dirname, 'packages'))
module.exports = {
prompt: {
scopes: [...packages]
}
}
当然如果你使用 commitlint 规则定义了 scope-enum
,会自动引入。
// .commitlintrc.js
const fs = require('fs')
const path = require('path')
const packages = fs.readdirSync(path.resolve(__dirname, 'packages'))
module.exports = {
rules: {
"scope-enum": [2, "always", [ ...packages ]]
}
};
项目业务层面
// .commitlintrc.js
const fs = require('fs')
const path = require('path')
const packages = fs.readdirSync(path.resolve(__dirname, 'packages'))
module.exports = {
prompt: {
scopes: ["home", "account", "comment"]
}
}
当然如果你想给模块范围自定义添加 描述信息 显示在命令行中可以使用 name
和 value
属性来定义
// .commitlintrc.js
const fs = require('fs')
const path = require('path')
const packages = fs.readdirSync(path.resolve(__dirname, 'packages'))
module.exports = {
prompt: {
scopes: [
{ value: "home", name: "home: 首页相关" },
{ value: "account", name: "account: 账户相关" },
{ value: "comment", name: "comment: 评论相关" },
]
}
}
issuePrefixs
国内用户如果使用 Gitee 作为项目管理,那么该工具可以很好 利用 commit message改变issue状态详情: gitee Commit 关联Issue通过设置任务状态指令,即起issue状态变更的别名,通过选择别名和输入issue号,可以很好的关联管理issue
// .commitlintrc.js
module.exports = {
prompt: {
issuePrefixs: [
// @see: https://gitee.com/help/articles/4141#article-header2
{ value: "wip", name: "wip: 将任务状态更改为进行中" },
{ value: "finish", name: "finish: 将任务状态更改为待完成" }
]
}
}
defaultIssues
自动获取commit关联issue,github的issue number
一般为数字,而 gitee 就有点反人类了,以至于我每次commit
如果想关联issue number
,就需要在分支名复制粘贴或到网页寻找,而如果我们的分支名有套规范,比如fix/issue_I72636_qb
,我可以这样处理:
- 利用
Node
的execSync
在运行时通过命令获取到分支名 - 再对获取的字符串进行处理
- 接着我们利用
defaultIssues
属性传入 - 使用时我们只需要按下 < Enter > 键就可以输出
Issue Number
,如此一来我们可以很方便截取到Issue Number
减少重复性工作。
// .commitlintrc.js
const { execSync } = require('child_process');
// @tip: git branch name = feature/33 => auto get defaultIssues = #33
const issue = execSync('git rev-parse --abbrev-ref HEAD')
.toString()
.trim()
.split("_")[1]
// @tip: monorepo dynamic get name
/** @type {import('cz-git').UserConfig} */
module.exports = {
prompt: {
defaultIssues: () => !issue ? "" : `#${issue}`
}
};
以上就是我的分享,希望大家格局打开,享受探索配置的过程让 cli 更契合你或团队的习惯,欢迎分享~
- 我的开发心路历程:https://www.qbenben.com/post/...
- 原文文档链接:https://cz-git.qbenben.com/zh...
- github地址(欢迎⭐️star⭐️):https://github.com/Zhengqbbb/...
转载自:https://segmentfault.com/a/1190000041548957