开发笔记(2):约定式提交commitizen

吐槽君 分类:javascript

约定式提交

基本概念

约定式提交是一种基于提交信息的轻量级约定.
它提供了一组简单规则来创建清晰的提交历史.
以便于我们能够快速查找信息,生成Changelog文件和编写自动化工具.

基本结构

<type>[optional scope]: <description>

[optional body]

[optional footer(s)]
 
<类型>[可选 范围]: <描述>

[可选 正文]

[可选 脚注]
 

工具推荐

  • commitizen/cz-cli: github.com/commitizen/…

Commitizen (约定式提交Nodejs工具)

基本介绍

Node.js 工具,用于创建遵循约定式提交规范的提交信息。

安装commitizen

  • 安装命令行工具
npm install -g commitizen
 
  • 初始化NPM Package
npm init -y
 
  • 初始化git本地仓库
git cz
 
  • commitizen详细配置(package.json)
{
// ...  default values
    "config": {
        "commitizen": {
            "path": "./node_modules/cz-conventional-changelog",
            "disableScopeLowerCase": false,
            "disableSubjectLowerCase": false,
            "maxHeaderWidth": 100,
            "maxLineWidth": 100,
            "defaultType": "",
            "defaultScope": "",
            "defaultSubject": "",
            "defaultBody": "",
            "defaultIssues": "",
            "types": {
              ...
              "feat": {
                "description": "A new feature",
                "title": "Features"
              },
              ...
            }
        }
    }
// ...
}
 
  • commitizen详细配置(环境变量)
CZ_TYPE = defaultType
CZ_SCOPE = defaultScope
CZ_SUBJECT = defaultSubject
CZ_BODY = defaultBody
CZ_MAX_HEADER_WIDTH = maxHeaderWidth
CZ_MAX_LINE_WIDTH = maxLineWidth
 
  • 我们可以任选适配器安装,不仅限于以下两种.如果要覆盖掉先前的适配器请添加--force参数.

安装cz-conventional-changelog适配器

  • 如果需要在项目中使用commitizen生成符合AngularJS规范的提交说明,初始化cz-conventional-changelog适配器
commitizen init cz-conventional-changelog --save --save-exact
 
  • 初始化命令主要进行了3件事情
    • 在项目中安装cz-conventional-changelog 适配器依赖
    • 将适配器依赖保存到package.json的devDependencies字段信息
    • 在package.json中新增config.commitizen字段信息,主要用于配置cz工具的适配器路径:
"devDependencies": {
 "cz-conventional-changelog": "^2.1.0"
},
"config": {
  "commitizen": {
    // 1. 如果是绝对路径则默认基于 process.cwd()
    // 2. 另外,也可以在指定的.czrc上配置,如:
    // {
    //   "path": "cz-conventional-changelog"
    // }
    "path": "./node_modules/cz-conventional-changelog"
  }
}
 

安装git-cz适配器

commitizen init git-cz --save-dev --save-exact
 
  • 初始化命令主要进行了3件事情
    • 在项目中安装git-cz适配器依赖
    • 将适配器依赖保存到package.json的devDependencies字段信息
    • 在package.json中新增config.commitizen字段信息,主要用于配置cz工具的适配器路径:
"devDependencies": {
  "git-cz": "^4.7.6"
},
"config": {
  "commitizen": {
    "path": "./node_modules/git-cz"
  }
}
 
  • 参数对应commit message视图
    • 一条commit message信息由header,body,footer组成.
    • 一个header又由typesubject组成,是提交消息的必要部分,被限制在50个字符以内.(强制)
    • 其他行应该在保持在72个字符以内.
    • scope:commit 影响的范围,比如数据层、控制层、视图层等等.
    • subject:应该使用简洁的祈使句(动词原形,对人称,时态不敏感),结尾没有点(.).
    • body:应该包含改变的动机,以及将改变前后进行对比.
    • breaking changes: 破坏性变化
    • footer: 引用与此提交相关的任何任务的位置.
<type>[(<scope>)]: <emoji> <subject>
[BLANK LINE]
[body]
[BLANK LINE]
[breaking changes]
[BLANK LINE]
[footer]
 
  • 默认是交互式配置
  • 执行非交互式配置
git-cz --non-interactive --type=feat --subject="add onClick prop to component"
# 可选参数
# --type
# --subject
# --scope
# --body
# --breaking
# --issues
# --lerna
 
  • 禁用emoji
git-cz --disable-emoji
 
  • 通过changelog.config.js生成模板配置模板
module.exports = {
  "disableEmoji": false,
  "list": [
    "test",
    "feat",
    "fix",
    "chore",
    "docs",
    "refactor",
    "style",
    "ci",
    "perf"
  ],
  "maxMessageLength": 64,
  "minMessageLength": 3,
  "questions": [
    "type",
    "scope",
    "subject",
    "body",
    "breaking",
    "issues",
    "lerna"
  ],
  "scopes": [],
  "types": {
    "chore": {
      "description": "Build process or auxiliary tool changes",
      "emoji": "?",
      "value": "chore"
    },
    "ci": {
      "description": "CI related changes",
      "emoji": "?",
      "value": "ci"
    },
    "docs": {
      "description": "Documentation only changes",
      "emoji": "✏️",
      "value": "docs"
    },
    "feat": {
      "description": "A new feature",
      "emoji": "?",
      "value": "feat"
    },
    "fix": {
      "description": "A bug fix",
      "emoji": "?",
      "value": "fix"
    },
    "perf": {
      "description": "A code change that improves performance",
      "emoji": "⚡️",
      "value": "perf"
    },
    "refactor": {
      "description": "A code change that neither fixes a bug or adds a feature",
      "emoji": "?",
      "value": "refactor"
    },
    "release": {
      "description": "Create a release commit",
      "emoji": "?",
      "value": "release"
    },
    "style": {
      "description": "Markup, white-space, formatting, missing semi-colons...",
      "emoji": "?",
      "value": "style"
    },
    "test": {
      "description": "Adding missing tests",
      "emoji": "?",
      "value": "test"
    }
  }
};
 

使用

  • 通过git cz替代git commit
git cz
 

常见提交类型说明

含义
feat 新增一个功能
fix 修复一个Bug
docs 文档变更
style 代码格式(不影响功能,例如空格、分号等格式修正)
refactor 代码重构
perf 改善性能
test 测试
build 变更项目构建或外部依赖(例如scopes: webpack、gulp、npm等)
ci 更改持续集成软件的配置文件和package中的scripts命令,例如scopes: Travis, Circle等
chore 变更构建流程或辅助工具
revert 代码回退
## Commitlint (Commit Message校验工具)
  • 每次进行commit提交都会校验commit message,如果不通过就会拦截commit
  • 安装命令行工具
npm install @commitlint/cli --save-dev
 
  • 安装常用配置
npm install @commitlint/config-conventional --save-dev
 
  • 安装git hooks工具.
npm install husky --save-dev
 
  • package.json配置
"husky": {
    "hooks": {
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
    }
}
 

Standard-version (版本信息文档生成工具)

  • 用以生成CHANGLOG.md文档
npm install standard-version --save-dev
 
  • npm scripts配置
{
  "scripts": {
    "release": "standard-version"
  }
}
 
  • 可以在package.json/.versionrc/.versionrc.json/.versionrc.js中进行配置
{
    "standard-version": {
        "skip": {
            "tag": true
        }
    }
}
 

相关连接

  • cz-customizable自定义适配器: github.com/leoforfree/…
  • gitflow:github.com/dreidev/git…

回复

我来回复
  • 暂无回复内容