我有一个python项目,我正在使用git进行版本控制,我想为基于PEP440的每次提交设置一个唯一的版本号。在
也就是说,对于主分支,我将使用以下版本号N(.N)*[{a|b|rc}N][.postN][.devN]
,对于每一个没有增加更高级别版本号的提交,devN
将由git在提交时自动递增,版本的其余部分有望由一个特殊的git命令控制:git increment-version {level}
其中一级将是major
,minor
,minor
,patch
,patch-{level}
(^{beta
,release
,final
,final
,^{post => postN
,用beta
代替alpha
,而{final
删除预发布组件,如果使用的是较早版本的组件,那么这应该会产生一个错误,当更高级别的版本递增时,所有较低级别的组件都将重置为零,并且字符串中不包括任何设置为零的修补程序级别,递增major
、minor
或{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
,比如{
您可以在下面的pypi项目中使用
version_scheme
选项来执行您想要的操作https://pypi.python.org/pypi/setuptools_scm
相关问题 更多 >
编程相关推荐