Cz-git Recipes - Easy to Commit
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.
github: https://github.com/Zhengqbbb
website: https://cz-git.qbenben.com/
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
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
default
defaultIssues
Obtaining the
Issue Number
automatically, it is a very troublesome thing to repeat the query to fill in theissue number
.But if the team's branch command rules are standardized (e.g: fix/33)
Then we use
Node
'sexecSync
to get the branch name through the commandThen 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 theIssue 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}`
}
};
Expand your imagination, and the highly customizable
cz-git
makes committing more convenient and more customary. Welcome to share.
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK