美文网首页
Commitizen 从0到1(git commit 规范工具)

Commitizen 从0到1(git commit 规范工具)

作者: copyLeft | 来源:发表于2021-06-28 16:03 被阅读0次

    简介

    commitizen git commit 格式化工具, 为我们提供标准化的 commit 信息。 帮助我们统一项目commit , 便于信息的回溯或日志的生成。# commit message 格式

    commitizen 只是提供一个commit 格式化或交互工具, 最终需要输出符合 commit 规则的信息给 git, 所以需要线了解 commit 格式规则

    <type>(<scope>):<subject> // Header
    // 空行
    <body>
    // 空行
    <footer>
    
    • Header 信息头 (必须)
      • type commit类型(必须)
      • scope commit 作用范围
      • subject commit 表述(必须)
    • body commit 详细信息
    • footer 辅助信息: 1. 不兼容变动 2. 关闭 Issue

    安装

    • 首先需要安装commitizen 工具本身

    // 本地安装

    npm i --save-dev commitizen
    
    • 配置命令
    // package.json
    {
      "script": {
        "commit": "cz"
       }
    }
    

    现在我们尝试调用一次工具命令

    // 添加差异
    git add *
    // 执行 commit 命令
    npm run commit
    
    image.png

    这里我们进入commit 编辑, 执行结果于git commit 一致, 那交互呢?
    其实commitizen 一般使用需要配合对应的规则模块。 通过规则模块规范化commit 信息。
    官方和社区提供了预设的规则包。

    • 安装规则包
    npx commitizen init cz-conventional-changelog --save-dev --save-exact
    

    安装完成后, package.json 内将新增 commitizen 配置

    image.png

    这里的 "path" 指向的是本地的配置模块文件

    执行 npm run commit

    image.png

    自定义配置

    package.json

    通过修改 package.json config 属性,设置自定义配置

    image.png image.png

    这里我们自定义的配置覆盖了原类型交互。

    配置文件

    通过查看源码, 可以发现,Commitizen 默认加根目录下的 .czrc .cz.json 配置文件

    image.png
     // 新增配置文件 
    touch .cz.json
    
    image.png

    自定义规则包

    类似包 cz-conventional-changelog , 我们可以编写自定义的交互规则包.

    新建包

    // root
    // 新建目录
    md commit-rule
    // npm 初始化
    npm init -y
    // 新增入口文件
    touch index.js
    

    编写包内容

    Commitizen 将调用模块内的 prompter 函数获取 commit 信息

    function prompter(cz, commit) {
    
    
      // cz 提供基础的交互能力, 搜集 commit 信息
      // commit 提交搜集的信息
    
    
      cz.prompt([
        {
          type: 'input',
          name: 'type',
          message: '类型',
        },
        {
          type: 'input',
          name: 'scope',
          message: '作用范围',
        },
        {
          type: 'maxlength-input',
          name: 'subject',
          message: '概要',
          maxLength: 20
        }
      ]).then(answers => {
        const { type, scope, subject } = answers
        const message = `
          ${type}(${scope}):${subject}
          
          time: ${new Date().getTime()}
        `
        commit(message)
      })
    
    
    // 导出规则函数
    module.exports = {
      prompter
    }
    
    ### 导入自定义包
    
    // .cz.json
    {
      "path": "./commit-rule"
    }
    

    执行 commit

    image.png image.png

    根据我们自定义的规则, 成功提交了commit信息

    这里只是简单的例子, 介绍简单的编写过程。 我们还可以实现更详细的信息规则或不同交互工具, 例如: inquirer Color 等 ,毕竟前端信息收集格式化都是可自定义的,最后commit 符合 git 规则的信息就可以了。

    参考文档

    Commit message 和 Change log 编写指南 - 阮一峰的网络日志
    官方github

    相关文章

      网友评论

          本文标题:Commitizen 从0到1(git commit 规范工具)

          本文链接:https://www.haomeiwen.com/subject/vtgqultx.html