我有一个python项目我正在使用git进行版本控制我想根据PEP440为每次提交设置一个唯一的版本号。
即我将使用以下版本编号N(.N)*[{a|b|rc}N][.postN][.devN]
作为主分支,对于每个提交更高级别版本号未递增的devN
将由提交时的git自动递增,希望版本的其余部分由特殊的git命令控制:git increment-version {level}
其中级别为major
之一,minor
,patch
,patch-{level}
(patch
与patch-0
相同),{ {1}},alpha
,beta
,release
,final
会将版本字符串映射为post
,{major}[.{minor}[(.{patch-N})*]]
,{{1 },alpha => aN
,beta => bN
,release => rcN
替换post => postN
和beta
替换alpha
,release
删除预释放组件,如果使用较早的一个而不是当前应该产生错误,当更高级别的版本递增时,所有较低级别都休息为零,并且任何补丁级别设置为零都不包括在字符串中,递增{{1} },beta
或final
会将每个版本的组件设置为major
。
对于从主分支分支的分支,将使用相同的数字,但该版本适用于它自己的分支,版本字符串为
minor
其中分支版本采用与主版本相同的格式
对于非主分支的分支,本地版本扩展如下
patch
其中分支名称必须以字母开头且不与[{a | b | rc} N] [.postN] [.devN]中的任何一个匹配,每个a0
被视为{master_version}+{branch_name}.{branch_version}
的扩展形式组件
应将版本字符串的位置指定为属于存储库的文件,并使用带有转义序列{branchN_name}.{branchN_version}(.{branchN_name}.{branchN_version})*
,{branchN_name}.{branchN_version}
,{{1}的字符串指定如下的行模式},.postN
即\\ = \
。
在提交git上应搜索指定文件以获取此行加载版本字符串,更新它并将新版本字符串写入文件,在提交包括更新版本字符串在内的更改之前,如果文件另有说明更改,但未添加到提交,版本,字符串应更新,在上一次提交的版本中,此更改传播到已修改的文件。如果a在主分支上,并且通过调用\" = "
来增加版本号
比git还应为该提交生成一个与版本字符串匹配的标记。
理想情况下,我想通过python脚本将此扩展名增加到git,该脚本是它自己的存储库的一部分。但是,我对其他解决这个问题的方法持开放态度。
编辑:
我认为最好的解决方案是制作git命令,即git-autoversion可执行文件。
然后为存储库启用所述版本控制,我将运行\' = '
会创建一个包含
的文件\v = version string
"__version__ = \"\v\""
它也有一个钩子git increment-version {level}
,它应作为预提交钩子运行。
最后它可以被称为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
将读取此内容并增加版本,如果未指定增量,则默认为dev,最后它调用命令git autoversion --[major|minor|patch{-level}|alpha|beta|release|final|post|dev]
来更新版本文件。
问题:当安装autoversion以调用increment=xxx
来提交任何存储库时,他们是一种安装全局git挂钩的方法,然后该命令可以检查.gitautoversion
是否发现更新版本否则执行没有。如果不是这样需要手动安装挂钩。
问题2:他们是一种将额外参数挂钩到git autoversion --commit
的方法,比如git-autoversion-tpl-{template} --version={version} --local={local} --file={file}
,它会在运行提交挂钩之前调用autoversion命令吗?