使用git on commit

时间:2017-07-30 11:40:33

标签: python git version-control versioning

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

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

其中级别为major之一,minorpatchpatch-{level}patchpatch-0相同),{ {1}},alphabetareleasefinal会将版本字符串映射为post{major}[.{minor}[(.{patch-N})*]],{{1 },alpha => aNbeta => bNrelease => rcN替换post => postNbeta替换alpharelease删除预释放组件,如果使用较早的一个而不是当前应该产生错误,当更高级别的版本递增时,所有较低级别都休息为零,并且任何补丁级别设置为零都不包括在字符串中,递增{{1} },betafinal会将每个版本的组件设置为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命令吗?

1 个答案:

答案 0 :(得分:1)

您可以在以下pypi项目中使用version_scheme选项来执行您想要的操作

docs