跳转到主要内容

使用单条命令升级您的软件版本!

项目描述

⚠️ 此项目的当前状态


bumpversion

一个简单的命令行工具,通过正确递增您的源代码中的所有版本字符串来简化软件发布。同时创建提交和标签

  • 版本格式高度可配置

  • 无需任何版本控制系统,但如果可用,则愉快地从Git和Mercurial读取标签信息以及向它们写入提交和标签

  • 仅处理文本文件,因此它不是针对任何特定编程语言的

https://travis-ci.org/peritus/bumpversion.png?branch=master https://ci.appveyor.com/api/projects/status/bxq8185bpq9u3sjd/branch/master?svg=true

屏幕截图

https://dl.dropboxusercontent.com/u/8735936/Screen%20Shot%202013-04-12%20at%202.43.46%20PM.png

安装

您可以从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_versionnew_version以及所有环境变量(以$为前缀)。您还可以使用变量nowutcnow来获取当前时间戳。两者都接受日期时间格式(当用作如{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_versionnew_version以及所有环境变量(以$为前缀)。您还可以使用变量nowutcnow来获取当前时间戳。两者都接受日期时间格式(当用作如{now:%d.%m.%Y}时)。

也可作为 --message 使用(例如:bumpversion --message '[{now:%Y-%m-%d}] Jenkins Build {$BUILD_NUMBER}: {new_version}' patch

特定配置部分

版本字符串由一个或多个部分组成,例如版本 1.0.2 有三个部分,由点(.)字符分隔。在默认配置中,这些部分被命名为 majorminorpatch,但您可以使用 parse/serialize 选项来自定义。

默认情况下,所有部分被视为数字,即它们的初始值是 0,并以整数形式增加。此外,如果不需要序列化,则值 0 被视为可选,即它在不提供 {major}.{minor} 作为 serialize 值时,版本 1.4.0 等于 1.4

对于高级版本管理方案,可能需要非数字部分(例如,为了标识 alpha 或 beta 版本、表示开发阶段、软件包的风味或发布名称)。为此,您可以使用包含部分名称的 [bumpversion:part:…] 部分(例如,名为 release_name 的部分配置在名为 [bumpversion:part:release_name] 的部分中)。

以下选项在部分配置内有效

values =

默认: 数字(即 012、…)

将迭代特定部分的所有值的显式列表。

示例

[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 选项,结合 grepsed

例如,如果您正在使用 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

v0.5.3

  • 修复问题:当存在配置时,未使用--new-version值(感谢 @cscetbon @ecordell(《#60》))

  • 保留配置文件的键的案例(感谢 theskumar(《#75》))

  • Windows CRLF改进(感谢 @thebjorn)

v0.5.1

  • 记录文件特定选项search =replace =(在0.5.0中引入)

  • 修复:即使存在最后一个标签之后的字符,也会从serialize =配置中解析单个标签(感谢 @mskrajnowski(《#56》))。

  • 修复:在包含包含连字符的标签的git仓库中不会崩溃(《#51》)(《#52》)。

  • 修复:记录配置文件的实际内容,而不是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

  • 添加–list选项(《#39”)

  • 使用临时文件处理提交/标签消息到git/hg(《#36”)

  • 修复:在py3上不要将stdout编码为utf-8(《#40”)

  • 修复:配置文件内容的记录错误

v0.4.0

  • 添加–verbose选项(《#21#30”)

  • 允许选项–serialize多次使用

v0.3.8

  • 修复:–parse/–serialize从cfg中不起作用(《#34”)

v0.3.7

  • 如果未安装git或hg则不会失败(感谢 @keimlink)

  • “files”选项现在为可选 (#16)

  • 修复与脏工作目录相关的错误 (#28)

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

  • 初始公开版本

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分发

bumpversion-0.6.0.tar.gz (11.9 kB 查看哈希值)

上传时间

构建分发

bumpversion-0.6.0-py2.py3-none-any.whl (8.4 kB 查看哈希值)

上传时间 Python 2 Python 3

由以下支持