在commi上使用git自动更新版本

2024-05-16 13:03:02 发布

您现在位置:Python中文网/ 问答频道 /正文

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

也就是说,对于主分支,我将使用以下版本号N(.N)*[{a|b|rc}N][.postN][.devN],对于每一个没有增加更高级别版本号的提交,devN将由git在提交时自动递增,版本的其余部分有望由一个特殊的git命令控制:git increment-version {level}

其中一级将是majorminorminorpatchpatch-{level}(^{}是同^{{},^{{},betareleasefinalfinal,^{}将映射到版本字符串的版本字符串,作为{{},^{{},^{{},^{{},{{},^{<},{{{{{{{cd18>},post => postN,用beta代替alpha,而{}代替{},final删除预发布组件,如果使用的是较早版本的组件,那么这应该会产生一个错误,当更高级别的版本递增时,所有较低级别的组件都将重置为零,并且字符串中不包括任何设置为零的修补程序级别,递增majorminor或{}将每个版本的组件设置为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 i、 e."__version__ = \"\v\""。在

在提交时git应该在指定的文件中搜索此行加载版本字符串,更新它并写出一个新的版本字符串到文件中,在提交包括更新的版本字符串在内的更改之前,如果文件已经被更改,但没有添加到提交中,则应该更新版本字符串,在上一次提交的版本中,并将此更改传播到已修改的文件。如果主分支上的,并且版本号已通过调用git increment-version {level}递增 然后git还应该为这个提交生成一个与版本字符串匹配的标记。在

理想情况下,我希望通过python脚本将这个扩展扩展扩展到git,而python脚本本身就是存储库的一部分。不过,我对解决这个问题的其他方法持开放态度。在

编辑:

我认为最好的解决方案是使git命令,即git自动版本可执行。在

然后,要为存储库启用上述版本控制,我将运行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

它还有一个钩子git autoversion --commit,应该作为预提交钩子运行。在

最后它可以被称为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}以更新版本文件。在

问题:当安装了autoversion时,他们是否有一种安装全局git钩子的方法来调用git autoversion --commit以提交到任何存储库,然后该命令可以检查.gitautoversion如果找到,请更新版本,否则什么也不做。如果没有,则需要手动安装吊钩。在

问题2:他们是否有一种方法可以将一个额外的参数挂接到git commit,比如{},它会在运行提交钩子之前调用autoversion命令?在


Tags: 文件字符串git命令版本version版本号分支