我不太明白如何使用
setuptools-scm
。
据我了解,这个工具应该根据SCM(在我的例子中是git)历史记录得出版本号。它基本上使用距最新标签的距离来获取此信息。
现在,假设我有一个项目,我们在其中工作:我们有
main
和 develop
分支。我们与 SemVer 合作,因此我们有一个 x.y.z
版本模式。现在,每当我们承诺 develop
时,我们都希望在我们的包注册表中拥有最新的包。因此,如果主分支上的最新版本是 1.2.3
,我们希望获得 1.2.3.dev1
、1.2.3.dev2
等。
我实际看到的情况是,如果我将
1.2.3
作为我的最新标签,setuptools-scm 会将下一个版本定义为 1.2.4
,另外,它会向版本添加 +g532hj..
,例如 之类的注册表PyPI Test
例如不接受。
有人能具体解释一下它是如何使用的吗?
是的,
setuptools-scm
的行为令人惊讶且难以理解,虽然文档没有(在我看来)适当强调它,但它已记录在案就在那里。
问题是,
setuptools-scm
获取当前版本如果您处于标记提交中,当您不在标记提交中时(大多数时候)它会非常努力地“猜测”下一个版本,将其分为两部分,“版本”和“本地”部分,格式为{version}+{local}
,两者都可以配置。
{version}
部分由version_scheme
指令控制,默认情况下:
自动猜测下一个开发版本(默认)。猜测 通过增加预发布段来发布即将发布的版本,如果 存在,否则通过增加微段。然后追加 .devN。如果标签以 .dev0 结尾,则版本不会被更改并且 自定义 .devN 版本将触发错误。
{local}
部分由local_scheme
指令控制,默认情况下:
在开发版本上添加节点以及脏工作目录上的日期(默认)
不幸的是,没有一个
version_scheme
的值能够完全执行你想要的操作(添加一个简单的 .devX
),但你可以使用其中之一:
post-release
生成发布后版本(添加.postN)
no-guess-dev
不猜测下一个版本,只是添加.post1.devN
关于
{local}
部分,您可以使用local_scheme
中的值no-local-version
完全禁用它。
省略本地版本,有用,例如因为pypi不支持
希望这有帮助。
编辑:抱歉,我的第一篇文章非常不完整,因为我一开始完全错过了
local_scheme
部分。