头图

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

Zhengqbbb

demo-gif

什么是 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 ]]
  }
};

demo-gif

项目业务层面

// .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:   评论相关" },
    ]
  }
}

demo-gif

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:   将任务状态更改为待完成" }
    ]
  }
}

demo-gif

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}`
  }
};

demo-gif

以上就是我的分享,希望大家格局打开,享受探索配置的过程让 cli 更契合你或团队的习惯,欢迎分享~

阅读 675

github: [链接]

0 声望
0 粉丝
0 条评论

github: [链接]

0 声望
0 粉丝
文章目录
宣传栏