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

cz-git.png

今天总算完成了 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 ]]
  }
};
156002738-af17087e-2d2b-4a80-a681-d63751282ec8.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"] 
  }
}

当然如果你想给模块范围自定义添加 描述信息 显示在命令行中可以使用 namevalue属性来定义

// .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:   评论相关" },
    ]
  }
}
156924322-7edaa527-cd16-4b69-9caf-7471d9984af8.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:   将任务状态更改为待完成" }
    ]
  }
}
156924322-7edaa527-cd16-4b69-9caf-7471d9984af8.gif

defaultIssues

自动获取commit关联issue,github的issue number一般为数字,而 gitee 就有点反人类了,以至于我每次commit如果想关联issue number,就需要在分支名复制粘贴或到网页寻找,而如果我们的分支名有套规范,比如fix/issue_I72636_qb,我可以这样处理:

  • 利用 NodeexecSync 在运行时通过命令获取到分支名
  • 再对获取的字符串进行处理
  • 接着我们利用 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}`
  }
};
156924691-10411379-b351-4632-a688-2df5e54a034c.gif

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

我的开发心路历程:https://juejin.cn/post/7069758088227586061

原文文档链接:https://cz-git.qbenben.com/zh/guide/recipes.html

github地址(欢迎star):https://github.com/Zhengqbbb/cz-git

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容