\ 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](https://pnpm.io/)Ā |Ā [lerna.js](https://lerna.js.org/)Ā to manage monorepo you can Use theĀ `path`Ā andĀ `fs`Ā modules to dynamically define the scopes (scopes) display in the commit message. ```javascript // .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](https://github.com/conventional-changelog/commitlint)Ā rule, it will be imported automatically. ```javascript // .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 ]] } }; ``` \  #### scopes for business system ```javascript // .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. ```javascript // .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" }, ] } } ``` \  ### 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. ```javascript // .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}` } }; ``` \n  > Expand your imagination, and the highly customizableĀ `cz-git`Ā makes committing more convenient and more customary. Welcome to share. \