cz-git 使用小技巧 —— 让 git commit 从此不再麻烦

Zhengqbbb -
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)评论系统相关...项目代码层面

如果你是使用 monorepopackages 作为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/...
特别申明:本文内容来源网络,版权归原作者所有,如有侵权请立即与我们联系(cy198701067573@163.com),我们将及时处理。

Tags 标签

前端node.jscommitizenclinpm

扩展阅读

加个好友,技术交流

1628738909466805.jpg