文章详情页 您现在的位置是:网站首页>文章详情

bumpversion管理软件版本号

图片丢失 Jeyrce.Lu 发表于:2020年3月20日 22:41 分类:【Python 3476次阅读

bumpversion是一个用python开发的“版本号”管理工具,你看的没错不同于git、svn版本控制,bumpversion仅仅是用来更新项目版本号的。  

 为什么要用版本号管理工具

(python3) jeeyshe@jeeyshe-PC:~/Code/python/xshop$ tree
.
├── bin
├── README.md
├── src
│   ├── app-one
│   │   ├── handlers.py
│   │   └── __init__.py
│   ├── app-two
│   │   ├── handlers.py
│   │   └── __init__.py
│   └── __init__.py
└── VERSION

如上图所示的一个项目结构,假如我们在VERSION文件中写入了当前软件版本0.1.0,现在我们开发完了项目测试通过准备发布,我们就需要将VERSION中的版本号更新到新的版本0.1.1或者0.2.0,如果只是这样,那么手动改掉VERSION文件中的版本号就可以了。

现在我们把逻辑变得稍微复杂一下,我们在VERSION、README.md、以及src/app*下面的__init__.py文件中都写入了版本号,现在从0.1.0更新到0.1.1,那我们得一个一个改,这样一来如果再进行手动的更改一个一个文件打开,然后再去改掉版本号,这样就显得很麻烦了,因此我们需要一种批量修改的方法。bumpversion就是这样一种用python开发的批量更新版本号的工具。

怎么使用bumpversion

pip install bumpversion

在项目根目录下添加一个.bumpversion.cfg文件,其他地方也可以但是执行命令的时候需要手动指定文件位置,新增文件后项目路径如下:


.
├── bin
│   └── .gitkeep
├── .bumpversion.cfg
├── README.md
├── src
│   ├── app-one
│   │   ├── handlers.py
│   │   └── __init__.py
│   ├── app-two
│   │   ├── handlers.py
│   │   └── __init__.py
│   └── __init__.py
└── VERSION

一份典型的.bumversion.cfg内容长这样:

[bumpversion]
current_version = 0.1.0
commit = False
tag = True
tag_name = 'v{new_version}'
message = 'Bump version: {current_version} → {new_version}'
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)
serialize = 
    {major}.{minor}.{patch}
    {major}.{minor}

    
[bumpversion:file:VERSION]
search = {current_version}
replace = {new_version}

[bumpversion:file:README.md]
search = VERSION: {current_version}
replace = {new_version}

[bumpversion:file:src/__init__.py]
search = __version__ == {current_version}
replace = {new_version}

[bumpversion:file:src/app-one/__init__.py]
search = __version__ == {current_version}
replace = {new_version}

[bumpversion:file:src/app-two/__init__.py]
search = __version__ == {current_version}
replace = {new_version}

使用例子

bumpversion patch
0.1.0 -> 0.1.1

bumpversion major 
0.1.1 -> 1.0.0

bumpversion minor
1.0.0 -> 1.1.0

配置解释:

[bumpversion]
current_version = 0.1.0    ; 当前版本信息
commit = False    ; 是否需要git提交
tag = True        ; git添加tag
tag_name = 'v{new_version}'    ; 当添加tag时的字符
message = 'Bump version: {current_version} → {new_version}'    ; git 提交的commit日志
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)     ; 项目文件中版本号匹配规则(正则)
serialize = 
    {major}.{minor}.{patch}    ; 序列化后的版本号
    {major}.{minor}

    
[bumpversion:file:VERSION]    ; 表示在.bumpversion.cfg同目录下VERSION查找当前版本号修改为新版本号
search = {current_version}
replace = {new_version}

在某些版本中,我们还会加入一些标签来提示版本运行环境,例如在开发环境运行的1.0.0.alpha版本,测试环境运行1.0.0.beta版本、在线上环境运行1.0.0.gamma版本,则我们也可以增加标签版本号

[bumpversion]
current_version = 1.alpha
parse = (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)\.(?P<release>.*)
serialize = 
    {major}.{minor}.{patch}.{release}
    {major}.{minor}.{patch}

[bumpversion:part:release]
optional_value = gamma
values =
  alpha
  beta
  gamma

以此类推,当一个项目足够庞大时,要修改的文件数量可能是数十上百个,不可能一个一个文件手动修改版本号,总得有批量修改的方法,不局限于bumpversion工具,也可以自己写脚本来修改。这个标签版本不太好用,我用了几次老是修改错误了,得到的新版本不是我想要的版本,慎用。

版权声明 本文属于本站  原创作品,文章版权归本站及作者所有,请尊重作者的创作成果,转载、引用自觉附上本文永久地址: http://blog.lujianxin.com/x/art/duldrxo5o2ng

文章评论区

作者名片

图片丢失
  • 作者昵称:Jeyrce.Lu
  • 原创文章:61篇
  • 转载文章:3篇
  • 加入本站:2046天

站点信息

  • 运行天数:2047天
  • 累计访问:164169人次
  • 今日访问:0人次
  • 原创文章:69篇
  • 转载文章:4篇
  • 微信公众号:第一时间获取更新信息