visit
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.
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.
Let me introduce the use of cz-git
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
If you need to manage multiple packages for a better experience, for example, use:Ā Ā |Ā Ā 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Ā Ā 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 ]]
}
};
// .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" },
]
}
}
Issue Number
Ā automatically, it is a very troublesome thing to repeat the query to fill in theĀ issue number
.
Node
'sĀ execSync
Ā to get the branch name through the commanddefaultIssues
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}`
}
};
Expand your imagination, and the highly customizableĀ
cz-git
Ā makes committing more convenient and more customary. Welcome to share.