Git 提交约束

1,507 阅读3分钟

需要安装的包:

  • husky:触发Git Hooks,执行脚本
  • lint-staged:检测文件,只对暂存区中有改动的文件进行检测,可以在提交前进行Lint操作
  • commitizen:使用规范化的message提交
  • commitlint:检查message是否符合规范
  • cz-conventional-changelog:适配器。提供conventional-changelog标准(约定式提交标准)。基于不同需要也可以使用不同适配器(比如:cz-customizable)
yarn add husky lint-staged commitizen @commitlint/config-conventional @commitlint/cli -D

默认提交说明

// package.json
{
"config": { "commitizen": { "path": "cz-conventional-changelog" } }
}

自定义提交说明

安装 cz-customizable

yarn add cz-customizable -D

  • cz-customizable 是可自定义的 Commitizen 插件,可帮助实现一致的 commit message
  • cz-customizable 适合大兴团队去自定义scope,和commit type。

新建 .cz-config.js

在项目根目录下创建 .cz-config.js 文件

官方提供了一份配置信息,可以去这个地址查看:github.com/leoforfree/…
cz-customizable 会首先在根目录下寻找:.cz-config.js 或 .config/cz-config.js,如果找不到,回去主目录寻找。我们也可以在 package.json中手动去指定配置文件的路径。

// package.json
{
    "config": { 
            "commitizen": { "path": "node_modules/cz-customizable" }, 
            "cz-customizable": { "config": "自定义路径" } 
            }
}

自定义.cz-config.js

来自 bqy

module.exports = { 
    // type 类型(定义之后,可通过上下键选择) 
    types: [ 
        { value: 'feat', name: 'feat: 新增功能' }, 
        { value: 'fix', name: 'fix: 修复 bug' }, 
        { value: 'docs', name: 'docs: 文档变更' },
        { value: 'style', name: 'style: 代码格式(不影响功能,例如空格、分号等格式修正)' }, 
        { value: 'refactor', name: 'refactor: 代码重构(不包括 bug 修复、功能新增)' }, 
        { value: 'perf', name: 'perf: 性能优化' }, 
        { value: 'test', name: 'test: 添加、修改测试用例' }, 
        { value: 'build', name: 'build: 构建流程、外部依赖变更(如升级 npm 包、修改 webpack 配置等)' }, 
        { value: 'ci', name: 'ci: 修改 CI 配置、脚本' }, 
        { value: 'chore', name: 'chore: 对构建过程或辅助工具和库的更改(不影响源文件、测试用例)' }, 
        { value: 'revert', name: 'revert: 回滚 commit' } 
    ], 
    // scope 类型(定义之后,可通过上下键选择) 
    scopes: [ 
        ['components', '组件相关'], 
        ['hooks', 'hook 相关'], 
        ['utils', 'utils 相关'], 
        ['element-ui', '对 element-ui 的调整'], 
        ['styles', '样式相关'], 
        ['deps', '项目依赖'], 
        ['auth', '对 auth 修改'],
        ['other', '其他修改'], 
        // 如果选择 custom,后面会让你再输入一个自定义的 scope。也可以不设置此项,把后面的 allowCustomScopes 设置为 true
        ['custom', '以上都不是?我要自定义'] 
        ].map(([value, description]) => { 
            return { value, 
            name: `${value.padEnd(30)} (${description})` } 
            }), 
        // 是否允许自定义填写 scope,在 scope 选择的时候,会有 empty 和 custom 可以选择。
        // allowCustomScopes: true, 
        // allowTicketNumber: false, 
        // isTicketNumberRequired: false, 
        // ticketNumberPrefix: 'TICKET-', 
        // ticketNumberRegExp: '\\d{1,5}', 
        // 针对每一个 type 去定义对应的 scopes,例如 fix /* 
        scopeOverrides: { 
            fix: [ 
                { name: 'merge' }, 
                { name: 'style' }, 
                { name: 'e2eTest' }, 
                { name: 'unitTest' } 
               ]
             }, */ 
             
          // 交互提示信息 
          messages: { 
          type: '确保本次提交遵循 Angular 规范!\n选择你要提交的类型:', 
          scope: '\n选择一个 scope(可选):', // 选择 scope: custom 时会出下面的提示 customScope: '请输入自定义的 scope:', 
          subject: '填写简短精炼的变更描述:\n',
          body: '填写更加详细的变更描述(可选)。使用 "|" 换行:\n', 
          breaking: '列举非兼容性重大的变更(可选):\n', 
          footer: '列举出所有变更的 ISSUES CLOSED(可选)。 例如: #31, #34:\n', 
          confirmCommit: '确认提交?' 
         },
         // 设置只有 type 选择了 feat 或 fix,才询问 breaking message 
         allowBreakingChanges: ['feat', 'fix'], 
         // 跳过要询问的步骤 
         // skipQuestions: ['body', 'footer'], 
         subjectLimit: 100, // subject 限制长度 
         breaklineChar: '|' // 换行符,支持 body 和 footer 
         // footerPrefix : 'ISSUES CLOSED:' 
         // askForBreakingChangeFirst : true, }

git cz来替代git commit 提交信息

git add .
git cz

pagckage.json中配置

    { 
    "scripts": { 
           "prepare": "husky install", 
           "lint-staged": "lint-staged --allow-empty", 
           "commit": "git cz", 
           "commitlint": "commitlint --config commitlint.config.js -e -V" 
          },
    "lint-staged": { 
        "{vue,js,ts}": [ 
            "eslint --fix" 
        ] 
    }, 
    "config": { 
        "commitizen": { "path": "./node_modules/cz-customizable" } 
        }

参考资料: