我不太懂如何使用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之类的注册表不接受该版本。
有人能确切解释一下它是怎么用的吗?
发布于 2022-11-11 15:25:44
是的,setuptools-scm的这种行为令人惊讶,也很难理解,虽然文档没有给它适当的强调(在我看来),但它被文档化了就在那儿。
问题是,如果您处于有标记的提交中,setuptools-scm将获得当前版本,当您不是(大多数时候)时,它会非常努力地“猜测”下一个版本,将其分为两个部分,“版本”和“本地”部分,格式为{version}+{local},它们都是可以配置。
{version}部件由version_scheme指令控制,默认情况下:
自动猜测下一个开发版本(默认)。如果存在,则通过增加预发布段来猜测即将发布的版本,否则则通过增加微段来猜测。然后追加.devN。如果标记以.dev0结尾,则版本不会发生碰撞,并且自定义.devN版本将触发错误。
{local}部件由local_scheme指令控制,默认情况下:
在dev版本上添加节点,在脏workdir上添加日期(默认)
不幸的是,没有一个version_scheme值可以完全满足您的需要(添加一个普通的.devX),但是您可以不使用其中的一个:
post-release生成发布后版本(添加.postN)
no-guess-dev不做下一个版本的猜测,只添加.post1.devN
关于{local}部件,您可以在local_scheme中完全禁用它,即值no-local-version。
省略本地版本,例如,因为pypi不支持本地版本
希望这能有所帮助。
编辑:对不起,我的第一篇文章很不完整,因为我一开始完全错过了local_scheme部分。
https://stackoverflow.com/questions/73605607
复制相似问题