Skip to main content

使用单个命令对您的软件进行版本升级!

项目描述

一个小型命令行工具,通过以正确的增量更新源代码中的所有版本字符串来简化发布软件。还创建提交和标签:

  • 版本格式是高度可配置的

  • 无需任何 VCS 即可工作,但很高兴从 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]
部分(必填)

要增加的版本部分,例如minor

有效值包括在--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 ,您就可以在以后不指定选项的情况下运行它。您应该将该文件添加到 VCS,以便其他人也可以更新版本。

命令行上的选项优先于配置文件中的选项,后者优先于从环境派生的选项,然后是默认选项。

示例.bumpversion.cfg

[bumpversion]
current_version = 0.2.9
commit = True
tag = True

[bumpversion:file:setup.py]

如果.bumpversion.cfg不存在,bumpversion也会查看 setup.cfg进行配置。

全局配置

常规配置分组在[bumpversion]部分中。

当前版本 =

无默认值(必填)

碰撞前软件包的当前版本。

也可用作--current-version (例如bumpversion --current-version 0.5.1 patch setup.py )

新版本 =

无默认值(可选)

增量后的软件包版本。如果没有给出将自动确定。

也可以作为--new-version使用(例如从 0.5.1 直接到 0.6.1bumpversion --current-version 0.5.1 --new- version 0.6.1 patch setup.py)。

标签 = (真|假)

默认值: False(不创建标签

是否创建标签,即新版本,以字符“ v ”为前缀。如果您使用 git,请不要忘记使用 --tags标志进行git-push 。

也可以在命令行中作为(--tag | --no-tag) 使用

标签名 =

默认值: v{new_version}

将创建的标签的名称。仅在使用--tag / tag = True时有效。

这是使用Python Format String Syntax模板化的。在模板上下文中可用的是current_versionnew_version 以及所有环境变量(以$为前缀)。您还可以使用变量nowutcnow来获取当前时间戳。两者都接受日期时间格式(在{now:%d.%m.%Y}中使用时)。

也可用作--tag-name(例如bumpversion --message 'Jenkins Build {$BUILD_NUMBER}: {new_version}' patch)。

提交=(真|假)

默认值: False不创建提交

是否使用 git 或 Mercurial 创建提交。

也可用作(--commit | --no-commit)

消息=

默认值: 凹凸版本:{current_version} → {new_version}

创建提交时使用的提交消息。仅在使用--commit / commit = True时有效。

这是使用Python Format String Syntax模板化的。在模板上下文中可用的是current_versionnew_version 以及所有环境变量(以$为前缀)。您还可以使用变量nowutcnow来获取当前时间戳。两者都接受日期时间格式(在{now:%d.%m.%Y}中使用时)。

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

零件特定配置

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

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

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

以下选项在部件配置中有效:

价值观 =

默认值:数字(即012 ……)

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

例子:

[bumpversion:part:release_name]
values =
  witty-warthog
  ridiculous-rat
  marvelous-mantis
可选值 =

默认值: 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 版本会将1.alpha 提升1.beta。再次执行 bumpversion release会将1.beta 提高1,因为 发布gamma是可选的。

第一个值 =

默认值: values =中的第一个条目。

当部件复位时,该值将设置为此处指定的值。

文件特定配置

[凹凸版本:文件:…]

解析 =

默认值:( ?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)

正则表达式(使用Python 正则表达式语法)关于如何查找和解析版本字符串。

需要解析由serialize =生成的所有字符串。命名匹配组 (” (?P<name>...) ”) 提供值 to 作为部分参数。

也可用作--parse

序列化 =

默认值: {major}.{minor}.{patch}

指定如何将版本部分序列化回版本字符串的模板。

这是使用Python Format String Syntax模板化的。在模板上下文中可用的是parse =中指定的命名组的解析值以及所有环境变量(以 $为前缀)。

可以多次指定,bumpversion 将尝试从第一个开始的序列化格式,并选择最后一个所有值都可以这样表示的格式:

serialize =
  {major}.{minor}
  {major}

鉴于上面的示例,新版本1.9将被序列化为 1.9,但版本2.0将被序列化为2

也可用作--serialize。命令行上给出多个值,例如--serialize {major}.{minor} --serialize {major}

搜索 =

默认值: {current_version}

模板字符串如何在文件中搜索要替换的字符串。如果存在最遥远的可能性,即当前版本号可能在文件中出现多次,并且您的意思是只碰撞其中一个,则很有用。可以是多行,使用Python 格式字符串语法进行模板化。

替换 =

默认值: {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 格式字符串语法进行模板化。

选项

上面的大多数配置值也可以作为选项给出。此外,还提供以下选项:

--空运行, -n

不要碰任何文件,只是假装。最好与--verbose一起使用。

--允许脏

通常,如果工作目录脏了,bumpversion 将中止,以保护自己不释放未版本化的文件和/或覆盖未保存的更改。使用此选项覆盖此检查。

--详细

将有用信息打印到 stderr

- 列表

将机器可读信息列出到标准输出以供其他程序使用。

示例输出:

current_version=0.0.18
new_version=0.0.19
-h,-- 帮助

打印帮助并退出

在脚本中使用碰撞版本

如果您需要在脚本中使用由 bumpversion 生成的版本,您可以使用–list选项,结合grepsed

例如,您正在使用 git-flow 来管理您的项目并希望自动创建发布。当您发出git flow release start 时,您已经需要知道新版本,然后再应用更改。

在 bash 脚本中获取它的标准方法是

bumpversion –dry-run –list <部分> | grep <字段名> | sed -rs,”^.*=”,,

其中 <part> 与往常一样是您正在更新的版本号的一部分。您需要指定 -dry-run以避免bumpversion 实际碰撞版本号。

例如,如果您正在更新次要编号并寻找新的版本号,这将变为

bumpversion –dry-run –list minor | grep 新版本 | sed -rs,”^.*=”,,

发展

在 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 文件了解详细信息

变化

未发布 v0.5.5 v0.5.4 v0.5.4-dev

v0.5.3

v0.5.1

  • 文档文件特定选项搜索 =替换 =(在 0.5.0 中引入)

  • 修复从serialize = config解析单个标签,即使最后一个标签之后有字符(感谢 @mskrajnowski #56)。

  • 修复:不要在标签包含连字符 ( #51 ) ( #52 ) 的 git 存储库中崩溃。

  • 修复:记录配置文件的实际内容,而不是 ConfigParser 读取后打印的内容。

  • 修复:在搜索中支持多行值 =

  • 还从setup.cfg加载配置(感谢@t-8ch #57)。

v0.5.0

这是一个主要功能,包含两个较大的功能,需要对配置格式进行一些更改。此版本与v0.4.1完全向后兼容 ,但弃用了两个将在未来版本中删除的用途。

  • 新功能:部分特定配置

  • 新功能:文件特定配置

  • 新特性: parse 选项现在可以跨越多行(允许注释复杂的正则表达式。有关详细信息,请参阅Python 文档中的 re.VERBOSE ,此测试用例 为例。)

  • 新功能:--allow-dirty ( #42 )。

  • 修复:以二进制模式保存文件以避免改变换行符(感谢@jaraco #45)。

  • 许可证:bumpversion 现在在 MIT 许可证下获得许可(#47

  • 弃用命令行上的多个文件(改用配置文件,或多次调用bumpversion )

  • 弃用 'files =' 配置(改用文件特定配置)

v0.4.1

  • 添加 –list 选项(#​​39

  • 使用临时文件将提交/标记消息移交给 git/hg ( #36 )

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

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

v0.4.0

  • 添加 –verbose 选项(#​​21 #30

  • 允许选项 - 多次序列化

v0.3.8

  • 修复:–parse/–serialize 在 cfg 中不起作用(#34

v0.3.7

  • 如果 git 或 hg 没有安装,不要失败(感谢@keimlink)

  • “文件”选项现在是可选的(#16

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

v0.3.6

  • 修复 –tag 默认值(感谢@keimlink)

v0.3.5

  • 将 {now} 和 {utcnow} 添加到上下文中

  • 使用正确的文件编码写入配置文件。注意:如果您使用 Python2 并希望在配置文件中使用 UTF-8 编码字符,则需要像使用“pip install -U configparser”一样更新 ConfigParser

  • 将 current_version 保留在配置中,即使可从 vcs 标签获得(令人困惑)

  • 在使用中打印自己的版本号

  • 允许碰撞包含非数字的部分

  • 有关文件编码的各种修复

v0.3.4

  • 错误修复:.bumpversion.cfg 中的 tag_name 和消息没有效果(#9

v0.3.3

  • 添加 --tag-name 选项

  • 现在适用于 Python 3.2、3.3 和 PyPy

v0.3.2

  • 错误修复:来自git的只读标签描述看起来像版本

v0.3.1

  • 错误修复: git workdir 中的--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

  • 水银支持

v0.1.1

  • 仅在请求时创建标签(感谢@gvangool)

v0.1.0

  • 初始公开版本

下载文件

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

源分布

bumpversion-kando-0.5.5.tar.gz (30.6 kB 查看哈希)

已上传 source

内置分布

bumpversion_kando-0.5.5-py2.py3-none-any.whl (24.7 kB 查看哈希)

已上传 py2 py3