Cz-git Recipes - Easy to Commit‚Äāby@zhengqbbb

Cz-git Recipes - Easy to Commit

cz-git is a Node.js-based `git commit` command-line tool that assists in generating standardized and standardized commit messages. It replaces the interactive plugin for the commitizen command line tool.
image
Zhengqbbb HackerNoon profile picture

Zhengqbbb

think >/dev/null


github: https://github.com/Zhengqbbb

website: https://cz-git.qbenben.com/

image

What is cz-git?

What is commitizen: A Node.js-based git commit command-line tool that assists in generating standardized and standardized commit messages.


What is an adapter: Replace the interactive plugin for the commitizen command line tool.


Why do it

For the past year, I have been committing almost every day, and as a lazy software engineer, I realized that almost all commitizen adapters are not very comfortable for me to use.


For example, if I repaired the table in the monorepo ui library, I must subconsciously fix the table. Why do I need to keep selecting up and down? I just want fi to press Enter to output fix, ta to press Enter to output table.So much so that I made the cz-git adapter.


recipes

Let me introduce the use of cz-git


scopes

scopes, usually to define the scope of this commit, there are generally two types: according to the project code distinction such as monorepo , the other is project business distinction


scopes for project code

If you need to manage multiple packages for a better experience, for example, use: pnpm | lerna.js to manage monorepo you can Use the path and fs modules to dynamically define the scopes (scopes) display in the commit message.

// .commitlintrc.js 
const fs = require('fs')
const path = require('path')
const packages = fs.readdirSync(path.resolve(__dirname, 'packages'))
module.exports = {
  prompt: { 
    scopes: [...packages] 
  }
}


If you define a scope-enum using the commitlintopen in new window rule, it will be imported automatically.

// .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

demo-gif

scopes for business system

// .commitlintrc.js 
const fs = require('fs')
const path = require('path')
const packages = fs.readdirSync(path.resolve(__dirname, 'packages'))
module.exports = {
  prompt: {
    scopes: ["app", "home", "account", "comment"] 
  }
}


Of course, if you want to add description information to the module-wide customization to display on the command line, you can use name and value to define.

// .commitlintrc.js 
const fs = require('fs')
const path = require('path')
const packages = fs.readdirSync(path.resolve(__dirname, 'packages'))
module.exports = {
  prompt: {
    scopes: [
      { value: "app",     name: "app:       System business" },
      { value: "home",    name: "home:      Homepage" },
      { value: "account", name: "account:   Account related" },
      { value: "comment", name: "comment:   Comment related" },
    ]
  }
}


demo-gif

demo-gif

default

defaultIssues

  • Obtaining the¬†Issue Number¬†automatically, it is a very troublesome thing to repeat the query to fill in the¬†issue number.
    • But if the team's branch command rules are standardized (e.g: fix/33)
    • Then we use¬†Node's¬†execSync¬†to get the branch name through the command
    • Then process the obtained string
    • Then we use¬†defaultIssues
    • When using, we only need to press the¬†<Enter>¬†key to output the¬†Issue Number, so that we can easily intercept the¬†Issue Number¬†to reduce repetitive work.
// .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}`
  }
};


image

Expand your imagination, and the highly customizable cz-git makes committing more convenient and more customary. Welcome to share.


react to story with heart
react to story with light
react to story with boat
react to story with money

Related Stories

L O A D I N G
. . . comments & more!