python - 在提交时使用 git 自动更新版本

标签 python git version-control versioning

我有一个 python 项目,我正在使用 git 进行版本控制我想根据 PEP440 为每个提交设置一个唯一的版本号.

即我将使用以下版本编号 N(.N)*[{a|b|rc}N][.postN][.devN]对于 master 分支,对于每个没有增加更高级别版本号的提交 devN将在提交时由 git 自动递增,其余版本有望由特殊的 git 命令控制:git increment-version {level}
其中 level 是 major 之一, minor , patch , patch-{level} ( patchpatch-0 相同),alpha , beta , release , final , post将映射到版本字符串为 {major}[.{minor}[(.{patch-N})*]] , alpha => aN , beta => bN , release => rcN , post => postN , 与 beta替换 alpharelease替换 beta , final删除预发布组件,如果使用比当前更早的组件,这应该会产生错误,当更高级别的版本增加时,所有较低级别都归零,并且任何设置为零的补丁级别都不包含在字符串中,递增 major , minorpatch将每个版本的组件设置为 a0 .

对于从主分支分支出来的分支,将使用相同的数字,但版本适用于它自己的分支,版本字符串为
{master_version}+{branch_name}.{branch_version}其中分支版本采用与主版本相同的格式

对于非主分支的分支,本地版本扩展如下{branchN_name}.{branchN_version}(.{branchN_name}.{branchN_version})*其中分支名称必须以字母开头并且不匹配任何 [{a|b|rc}N][.postN][.devN],每个 {branchN_name}.{branchN_version}被视为 .postN 的扩展形式零件

版本字符串的位置应指定为作为存储库一部分的文件,以及使用带有转义序列的字符串的如下行模式\\ = \ , \" = " , \' = ' , \v = version string"__version__ = \"\v\"" .

在提交时,git 应该在指定文件中搜索此行,加载版本字符串,更新它并将新的版本字符串写入文件,中间在提交更改之前,包括更新的版本字符串,如果文件有其他更改,但是未添加到提交中,版本,字符串应该更新,在上一次提交的版本中,并且此更改传播到修改后的文件。如果 a 在 master 分支上,并且版本号已通过调用 git increment-version {level} 递增
比 git 还应该为此提交生成一个与版本字符串匹配的标签。

理想情况下,我想通过作为其自身存储库一部分的 python 脚本将此扩展增加到 git。但是,我对解决此问题的其他方法持开放态度。

编辑:

我相信最好的解决方案是使 git 命令,即 git-autoversion 可执行。

然后要为存储库启用所述版本控制,我将运行 git autoversion --init --style=pep440 --template=python-info --versionfile=XXX/_info.py
这将创建一个文件 .gitautoversion这将包含

[autoversion]
version=1.0
local=
style=pep440
template=python-info
file=XXX/_info.py

它也会有一个钩子(Hook)git autoversion --commit它应该作为预提交钩子(Hook)运行。

最后它可以称为git autoversion --[major|minor|patch{-level}|alpha|beta|release|final|post|dev]可用于标记要递增的版本号,只有最后一次调用才会计算这将添加行 increment=xxx.gitautoversion配置文件,命令git autoversion --commit将读取此内容并增加版本,如果未指定增量,则默认为 dev,最后调用命令 git-autoversion-tpl-{template} --version={version} --local={local} --file={file}更新版本文件。

问题:当安装自动版本以调用 git autoversion --commit 时,他们是安装全局 git Hook 的一种方式吗?对于任何存储库的提交,此命令可以检查 .gitautoversion如果找到更新版本,否则什么也不做。如果不是,这将需要手动安装 Hook 。

问题 2:他们是否可以将额外的参数 Hook 到 git commit? ,比如说--autoversion=[major|minor|patch{-level}|alpha|beta|release|final|post|dev] ,它会在运行提交 Hook 之前调用 autoversion 命令?

最佳答案

您也许可以使用 version_scheme以下pypi项目中的选项来做你想做的事

https://pypi.python.org/pypi/setuptools_scm

关于python - 在提交时使用 git 自动更新版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45399398/

相关文章:

python - (重新)使用 PIP 检查依赖关系

git - 防止 CSV 文件的 EOL 规范化

git - 无法删除本地git分支

version-control - IIS 的最佳版本控制系统?

c++ - python函数作为c++暴露类的参数使用::boost::python

python - 在 matplotlib 中绘制单元格平均值而不是线图

python - 同时使用 python3 和 python 2.7 时出现 numba 类型错误

git - 如何在不增加主仓库大小的情况下更新浅克隆子模块

git - 如何在开源项目中 stash 私有(private)信息?

git: 'credential-osxkeychain' 不是 git 命令。见 'git --help'