Git做版本管理及CHANGELOG

版本管理和CHANGELOG

规范化的提交信息除了能很好描述项目的修改,还有一个很好的作用就是能根据提交记录来生成CHANGELOG.MD和自动生成版本号等功能。

standard-version

一个用于生成CHANGELOG.md和进行SemVer(语义化版本号)发版的命令行工具

主要功能:

  • 自动修改最新版本号,可以是package.json或者自定义一个文件
  • 读取最新版本号,创建一个最新的git tag
  • 根据提交信息,生成CHANGELOG.md
  • 创建一个新提交包括 CHANGELOG.mdpackage.json

语义化版本控制(SemVer)

先简单了解下什么是语义化的版本控制,其是由GitHub发起的一份用于规范版本号递增的规则,

版本格式

主版本号.次版本号.修订号,版本号递增规则如下:

  • 主版本号(major):当你做了不兼容的 API 修改,
  • 次版本号(minor):当你做了向下兼容的功能性新增,可以理解为Feature版本,
  • 修订号(patch):当你做了向下兼容的问题修正,可以理解为Bug fix版本。

先行版本号可以加到“主版本号.次版本号.修订号”的后面,作为延伸。

先行版本

当即将发布大版本改动前,但是又不能保证这个版本的功能 100% 正常,这个时候可以发布先行版本:

  • alpha: 内部版本
  • beta: 公测版本
  • rc: 候选版本(Release candiate)

比如:1.0.0-alpha.0,1.0.0-alpha.1,1.0.0-rc.0,1.0.0-rc.1等。

standard-verstion 生成的CHANGELOG只会包含feat,fix,BREACK-CHANGE类型的提交记录

使用

npm i --save-dev standard-version

添加npm script,完整的命令如下。

{
    scripts: {
        "release": "standard-version",
        "release:alpha": "standard-version --prerelease alpha",
        "release:rc": "standard-version --prerelease rc",
        "release:major": "npm run release -- --release-as major",
        "release:minor": "npm run release -- --release-as minor",
        "release:patch": "npm run release -- --release-as patch"
    }
}

执行过后会修改 package.version 并修改CHANGELOG 文件。

完整的package.json

commitizen + cz-conventional-changelog + commitlint +standard-version

{
    "name": "blog",
    "version": "1.0.0",
    "description": "blog",
    "main": "index.js",
    "scripts": {
        "start": "npm run dev",
        "release": "standard-version",
        "release:alpha": "standard-version --prerelease alpha",
        "release:rc": "standard-version --prerelease rc",
        "release:major": "npm run release -- --release-as major",
        "release:minor": "npm run release -- --release-as minor",
        "release:patch": "npm run release -- --release-as patch"
    },
    "devDependencies": {
        "@commitlint/cli": "^17.6.6",
        "@commitlint/config-conventional": "^17.6.6",
        "commitizen": "^4.2.2",
        "cz-conventional-changelog": "^3.3.0",
        "standard-version": "^9.1.0"
    },
    "config": {
        "commitizen": {
            "path": "cz-conventional-changelog"
        }
    },
    "commitlint": {
        "extends": [
            "@commitlint/config-conventional"
        ]
    }
}

你可能感兴趣的:(大前端,git,前端,npm)