使用单条命令升级您的软件版本!
项目描述
⚠️ 此项目的当前状态
🎬 如果您想 使用bumpversion,最好安装维护分支之一,例如 ➡ @c4urself的bump2version。
🔨 如果您想 维护bumpversion,有一个 关于将分支合并回原始项目以及组建维护者团队的持续讨论,以确保本项目的长期发展。请贡献力量。
bumpversion
一个简单的命令行工具,通过正确递增您的源代码中的所有版本字符串来简化软件发布。同时创建提交和标签
版本格式高度可配置
无需任何版本控制系统,但如果可用,则愉快地从Git和Mercurial读取标签信息以及向它们写入提交和标签
仅处理文本文件,因此它不是针对任何特定编程语言的
屏幕截图
安装
您可以从Python包索引(PyPI)下载并安装此软件的最新版本,方法如下
pip install --upgrade bumpversion
用法
有两种操作模式:单文件操作在命令行,复杂的多文件操作使用配置文件。
bumpversion [options] part [file]
- 部分(必填)
要增加的版本部分,例如次版本号。
有效值包括在--serialize / --parse选项中给出的值。
示例 将0.5.1提升到0.6.0
bumpversion --current-version 0.5.1 minor src/VERSION
- [文件]
默认值:无(可选)
将要修改的文件。
如果没有提供,将使用配置文件中的[bumpversion:file:…]部分的列表。如果配置文件中也没有提及任何文件,则不会修改任何文件。
示例 将1.1.9提升到2.0.0
bumpversion --current-version 1.1.9 major setup.py
配置
所有选项都可以在名为.bumpversion.cfg的配置文件中指定,这样一旦你知道如何为特定软件包配置bumpversion,你就可以在以后运行它而不必指定选项。你应该将该文件添加到版本控制系统中,以便其他人也可以提升版本。
命令行上的选项优先于配置文件中的选项,配置文件中的选项优先于从环境变量派生的选项,然后是默认值。
示例 .bumpversion.cfg
[bumpversion] current_version = 0.2.9 commit = True tag = True [bumpversion:file:setup.py]
如果没有.bumpversion.cfg存在,bumpversion还将查找setup.cfg以进行配置。
全局配置
一般配置分组在[bumpversion]部分中。
- current_version =
无默认值(必填)
提升前的软件包当前版本。
也可作为--current-version使用(例如,bumpversion --current-version 0.5.1 patch setup.py)
- new_version =
无默认值(可选)
提升后的软件包版本。如果没有提供,将自动确定。
也可作为--new-version使用(例如,要直接从0.5.1提升到0.6.1:bumpversion --current-version 0.5.1 --new-version 0.6.1 patch setup.py)。
- tag = (True | False)
默认值: False (不创建标签)
是否创建标签,即以字符“v”为前缀的新版本。如果你使用git,不要忘记使用带有--tags标志的git-push。
也可在命令行上作为(--tag | --no-tag)
- tag_name =
默认值: v{new_version}
要创建的标签的名称。仅当使用--tag / tag = True时有效。
这是使用Python 格式化字符串语法进行模板化的。在模板上下文中可用的是current_version和new_version以及所有环境变量(以$为前缀)。您还可以使用变量now或utcnow来获取当前时间戳。两者都接受日期时间格式(当用作如{now:%d.%m.%Y}时)。
也可作为 --tag-name 使用(例如:bumpversion --message 'Jenkins Build {$BUILD_NUMBER}: {new_version}' patch)。
- commit = (True | False)
默认: False (不创建提交)
是否使用 git 或 Mercurial 创建提交。
也可作为 (--commit | --no-commit) 使用。
- message =
默认: Bump version: {current_version} → {new_version}
创建提交时使用的提交信息。仅在使用 --commit / commit = True 时有效。
这是使用Python 格式化字符串语法进行模板化的。在模板上下文中可用的是current_version和new_version以及所有环境变量(以$为前缀)。您还可以使用变量now或utcnow来获取当前时间戳。两者都接受日期时间格式(当用作如{now:%d.%m.%Y}时)。
也可作为 --message 使用(例如:bumpversion --message '[{now:%Y-%m-%d}] Jenkins Build {$BUILD_NUMBER}: {new_version}' patch)
特定配置部分
版本字符串由一个或多个部分组成,例如版本 1.0.2 有三个部分,由点(.)字符分隔。在默认配置中,这些部分被命名为 major、minor、patch,但您可以使用 parse/serialize 选项来自定义。
默认情况下,所有部分被视为数字,即它们的初始值是 0,并以整数形式增加。此外,如果不需要序列化,则值 0 被视为可选,即它在不提供 {major}.{minor} 作为 serialize 值时,版本 1.4.0 等于 1.4。
对于高级版本管理方案,可能需要非数字部分(例如,为了标识 alpha 或 beta 版本、表示开发阶段、软件包的风味或发布名称)。为此,您可以使用包含部分名称的 [bumpversion:part:…] 部分(例如,名为 release_name 的部分配置在名为 [bumpversion:part:release_name] 的部分中)。
以下选项在部分配置内有效
- values =
默认: 数字(即 0、1、2、…)
将迭代特定部分的所有值的显式列表。
示例
[bumpversion:part:release_name] values = witty-warthog ridiculous-rat marvelous-mantis
- optional_value =
默认: values = 的第一个条目。
如果部分值与此值匹配,则它被视为可选,即它在不提供 --serialize 可能性时,其表示不是必需的。
示例
[bumpversion] current_version = 1.alpha parse = (?P<num>\d+)\.(?P<release>.*) serialize = {num}.{release} {num} [bumpversion:part:release] optional_value = gamma values = alpha beta gamma
在此,bumpversion release 会将 1.alpha 升级到 1.beta。再次执行 bumpversion release 会将 1.beta 升级到 1,因为 release 被配置为可选。
- first_value =
默认: values = 的第一个条目。
当部分重置时,值将被设置为这里指定的值。
文件特定配置
[bumpversion:file:…]
- parse =
默认: (?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)
正则表达式(使用 Python 正则表达式语法)用于查找和解析版本字符串。
需要解析由 serialize = 产生的所有字符串。命名匹配组(“(?P<name>...)”)作为 part 参数提供值。
也作为 --parse 使用。
- serialize =
默认值: {major}.{minor}.{patch}
模板指定如何将版本部分序列化为版本字符串。
这是使用 Python 格式字符串语法 模板化的。在模板上下文中,可用的是在 parse = 中指定的命名组的解析值以及所有环境变量(以 $ 为前缀)。
可以指定多次,bumpversion 将尝试从第一个开始的序列化格式,并选择最后一个所有值都可以这样表示的格式。
serialize = {major}.{minor} {major}
给定上面的例子,新版本 1.9 将序列化为 1.9,但版本 2.0 将序列化为 2。
也作为 --serialize 使用。命令行上的多个值给出如 --serialize {major}.{minor} --serialize {major}
- search =
默认值: {current_version}
模板字符串,用于在文件中搜索要替换的字符串。如果当前版本号可能在文件中出现多次,并且你只想更改其中一个出现,则很有用。可以是多行,使用 Python 格式字符串语法 模板化。
- replace =
默认值: {new_version}
用于在文件中替换当前版本号的字符串模板。
给定这个 requirements.txt
Django>=1.5.6,<1.6 MyProject==1.5.6
使用这个 .bumpversion.cfg 将确保只更改包含 MyProject 的行
[bumpversion] current_version = 1.5.6 [bumpversion:file:requirements.txt] search = MyProject=={current_version} replace = MyProject=={new_version}
可以是多行,使用 Python 格式字符串语法 模板化。
选项
上述大多数配置值也可以作为选项提供。此外,还提供以下选项
- --dry-run, -n
不接触任何文件,只是假装。最好与 --verbose 结合使用。
- --allow-dirty
通常,如果工作目录是脏的,bumpversion 将终止以保护您免于发布未标记的文件和/或覆盖未保存的更改。使用此选项可覆盖此检查。
- --verbose
将有用信息打印到 stderr
- --list
将机器可读信息列表输出到 stdout,以便其他程序使用。
示例输出
current_version=0.0.18 new_version=0.0.19
- -h, --help
打印帮助并退出
在脚本中使用 bumpversion
如果您需要在脚本中使用 bumpversion 生成的版本,可以使用 –list 选项,结合 grep 和 sed。
例如,如果您正在使用 git-flow 来管理项目,并希望自动创建一个版本。当您发出 git flow release start 时,在应用更改之前,您已经需要知道新版本。
在 bash 脚本中获得它的标准方式是
bumpversion –dry-run –list <part> | grep <field name> | sed -r s,”^.*=”,,
其中 <part> 是通常更新的版本号的部分。您需要指定 –dry-run 以避免 bumpversion 实际上提升版本号。
例如,如果您正在更新小版本号并查找新版本号,则变为以下命令:
bumpversion –dry-run –list minor | grep new_version | sed -r s,”^.*=”,,
开发
本项目的开发在GitHub上完成,包括测试、文档在内的补丁都非常欢迎,以及错误报告!如果此工具不支持您开发流程中版本升级的各个方面,请打开一个问题,因为它旨在非常灵活。
如何发布bumpversion本身
执行以下命令
git checkout master git pull tox bumpversion release python setup.py sdist bdist_wheel upload bumpversion --no-tag patch git push origin master --tags
许可证
bumpversion许可协议为MIT许可证 - 详细信息请参阅LICENSE.rst文件
变更
0.6.0
弃用:发布与较新版本的bump2version链接的包,以便无缝升级(见:https://pythonlang.cn/dev/peps/pep-0423/#id106)
v0.5.3
修复问题:当存在配置时,未使用--new-version值(感谢 @cscetbon @ecordell(《#60》))
保留配置文件的键的案例(感谢 theskumar(《#75》))
Windows CRLF改进(感谢 @thebjorn)
v0.5.1
记录文件特定选项search =和replace =(在0.5.0中引入)
修复:即使存在最后一个标签之后的字符,也会从serialize =配置中解析单个标签(感谢 @mskrajnowski(《#56》))。
修复:记录配置文件的实际内容,而不是ConfigParser读取后的内容。
修复:支持search =的多行值
还从setup.cfg加载配置(感谢 @t-8ch(《#57》))。
v0.5.0
这是一个重大的版本,包含两个较大的功能,需要对配置格式进行一些更改。此版本完全向后兼容到v0.4.1,但弃用两种将在未来版本中删除的使用。
新功能:部分特定配置
新功能:文件特定配置
新功能:解析选项现在可以跨越多行(允许注释复杂的正则表达式。有关详细信息,请参阅Python文档中的re.VERBOSE,以下是一个示例测试用例。)
新功能:--allow-dirty(《#42》)
修复:以二进制模式保存文件以避免更改换行符(感谢 @jaraco(《#45》))
许可证:bumpversion现在许可协议为MIT许可证(《#47”)
弃用命令行上的多个文件(使用配置文件或多次调用bumpversion)
弃用‘files =’配置(使用文件特定配置)
v0.4.1
v0.4.0
v0.3.8
修复:–parse/–serialize从cfg中不起作用(《#34”)
v0.3.7
v0.3.6
修复 –tag 默认值(感谢 @keimlink)
v0.3.5
将 {now} 和 {utcnow} 添加到上下文中
使用正确的文件编码写入配置文件。注意:如果您正在使用 Python2 并且想在配置文件中使用 UTF-8 编码的字符,您需要像使用‘pip install -U configparser’一样更新 ConfigParser
即使从 vcs 标签中可用,也保留当前版本在配置中(以前很令人困惑)
在用法中打印自己的版本号
允许增加包含非数字的部分
有关文件编码的多个修复
v0.3.4
错误修复:.bumpversion.cfg 中的 tag_name 和 message 没有作用 (#9)
v0.3.3
添加 –tag-name 选项
现在在 Python 3.2、3.3 和 PyPy 上运行
v0.3.2
错误修复:从 git describe 中只读取看起来像版本号的标签
v0.3.1
错误修复:在 git 工作目录中 --help 引发 AssertionError
错误修复:如果一个文件不存在,则更早失败
错误修复:.bumpversion.cfg 中的 commit = True / tag = True 没有作用
v0.3.0
重大更改 已删除 --bump 参数,这现在是第一个位置参数。如果您以前使用过 bumpversion --bump major,现在可以使用 bumpversion major。如果您以前在没有参数的情况下使用 bumpversion,现在您需要指定部分(以前的默认值为 patch),如 bumpversion patch)。
v0.2.2
添加 –no-commit、–no-tag
v0.2.1
如果可用,使用 git 了解当前版本
v0.2.0
支持 Mercurial
v0.1.1
仅在请求时创建标签(感谢 @gvangool)
v0.1.0
初始公开版本