5

Cz-git Recipes - Easy to Commit

 2 years ago
source link: https://hackernoon.com/cz-git-recipes-easy-to-commit
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

github: https://github.com/Zhengqbbb

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

-61a3mrg.gif.webp

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}`
  }
};
-klb3mu4.gif.webp

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK