git自动生成changelog及项目版本管理

11,779

版本管理

1.version类别介绍

每个npm包中都有一个package.json文件,如果要发包的话,package.json中的version就是版本号了。

version字段结构为:'0.0.0-0'

分别代表:大号.中号.小号-预发布号,对应majon.minor.patch-prerelease

下面来看看npm中version的类别及描述。

  • major

    • 如果没有预发布号,则直接升级一位大号,其他位都置为0
    • 如果有预发布号:
      1. 中号和小号都为0,则不升级大号,而将预发布号删掉。即2.0.0-1变成2.0.0,这就是预发布的作用
      1. 如果中号和小号有任意一个不是0,那边会升级一位大号,其他位都置为0,清空预发布号。即 2.0.1-0变成3.0.0
  • minor

    • 如果没有预发布号,则升级一位中号,大号不动,小号置为空
    • 如果有预发布号:
      1. 如果小号为0,则不升级中号,将预发布号去掉
      1. 如果小号不为0,同理没有预发布号
  • patch

    • 如果没有预发布号:直接升级小号,去掉预发布号
    • 如果有预发布号:去掉预发布号,其他不动
  • premajor

    • 直接升级大号,中号和小号置为0,增加预发布号为0
  • preminor

    • 直接升级中号,小号置为0,增加预发布号为0
  • prepatch

    • 直接升级小号,增加预发布号为0
  • prerelease

    • 如果没有预发布号:增加小号,增加预发布号为0
    • 如果有预发布号,则升级预发布号

2.version 运用

执行命令npm version可以自动更改package.json中的版本号。

比如,package.json包中的version是1.1.1,然后执行如下命令:

npm version prerelease -m "这里你可以添加此次更新版本号的描述"

执行完之后,package.json的版本号则会变成1.1.1-0,同时,在git中会多一个commit log。

值得注意的是,执行npm version必须保证工作目录是干净的,没有任何未提交的文档,否则会报错。

git提交规范

一个项目都是由很多人一起合作,然而每个人的开发习惯,提交格式并不统一,这对于统计bug 和 需求有一定困难。

所以,commit message 规范就格外重要。

格式化commit的好处

1.提供更多的历史信息,方便快速浏览。

2.可以过滤某些文档,方便快速查找

3.可以直接从commit生成change log。

commit message的格式


类别: 做了什么 简短描述做了什么

详细描述做了什么(可省略)

  • 类别type:

    • feat:新功能
    • fix:修补
    • docs:文档
    • style:格式
    • refactor:重构(既不是新增,也不是代码变动)
    • test:增加测试
    • chore:构建过程中或辅助工具的变动。
例如:

fix: bug(123) 修补了…………

修改了....

feat: 需求(123) 新增了某某功能

详细描述某某功能(可省略)

自动生成change log

如果所有的commit都符合格式,那么发布新版本时,change log 就可以用脚本自动生成。

conventional-changelog 就是生成 Change log 的工具。

先命令全局安装:

$ npm install -g conventional-changelog-cli

然后进入项目,执行命令:

$ cd my-project
$ conventional-changelog -p angular -i CHANGELOG.md -s

conventional-changelog -p angular -i CHANGELOG.md -w 则会在命令行中生成log,并不会生成文件

上面命令不会覆盖CHANGELOG.md文档,只会在文档前面新增,如果你想生成所有发布的 Change log,要改为运行下面的命令:

$ conventional-changelog -p angular -i CHANGELOG.md -s -r 0

如若你不需要手动修改CHANGELOG.md文档,可以自动提交CHANGELOG.md文档:

conventional-changelog -p angular -i CHANGELOG.md -s && git commit -m "docs: 更改CHANGELOG.md"

每次执行这么长的命令,很难,我们可以配置在npm中

{
  "scripts": {
    "changelog": "conventional-changelog -p angular -i CHANGELOG.md -s" 
  } 
}

下次运行直接命令:npm run changelog即可。

这时候,可以看见,项目中就会多了一个CHANGELOG.md文档,如果你的提交不符合规范,那么在最开始使用的时候,这个文档里,可能什么都没有。

而且,要注意的是,在我们每次changelog之前,都必须要使用npm version升级版本,否则,commit一直都会有之前的记录。