我在看供应链管理
我读了这部分,scm#版本-编号-构造
我引用一下
具有发布分支的项目的语义版本控制。与在发布分支上增加预发布段或微段相同:一个分支,其名称(忽略名称空间)被解析为与最近的标记相匹配的版本。否则,如果在非释放分支上,增加次要段并将微段设置为零,则追加.devN。
这是怎么回事?
假设我的设置在这个提交https://github.com/simkimsia/test-setup-py/commit/5ebab14b16b63090ad0554ad8f9a77a28b047323上
同样的回购,我如何通过分支来增加版本?
我在2022-03-15
我更新了一些主要分支的文件。
然后我做了以下工作
python -m pip install --upgrade "pip ~= 21.3"
pip install pip-tools "pip-tools ~= 6.5"
git init .
git add .
git commit -m '♻️ REFACTOR'
git tag -a v0.0.0 -m ' First tag v0.0.0'
pip-compile
pip-sync
pip install -e .
然后,我推送我的更改,包括标签
所以这个提交是https://github.com/simkimsia/test-setup-py/commit/75838db70747fd06cc190218562d0548baa16e9d
当我运行python -m demopublicpythonproject
时,出现的版本是正确的
这里显示的版本号基于.py#L14
然后我就分叉了
git checkout -b v0.0.1
然后我添加了一个pyproject.toml并将其设置为发布分支。
# pyproject.toml
[build-system]
requires = ["setuptools>=45", "setuptools_scm[toml]>=6.2"]
version_scheme = "release-branch-semver"
请参阅https://github.com/simkimsia/test-setup-py/blob/v0.0.1/pyproject.toml
然后我跑了
python -m setuptools_scm
我得到了
/Users/kimsia/.venv/test-setup-py-py3812/bin/python: No module named setuptools_scm
无论如何,我运行以下命令
pip-compile
pip-sync
pip install -e .
git commit -m 'Attempt to do branch semver'
然后我就有了这个提交,结果是https://github.com/simkimsia/test-setup-py/commit/527885531afe37014dc66432a43a402ec0808caa
当我运行python -m demopublicpythonproject
时,我得到了这个映像
这个版本似乎是基于分支编号的,但我可能错了,因为最新的标记是v0.0.0
所以我
git checkout -b main
git checkout -b v0.1.0
pip-sync
pip install -e .
python -m demopublicpythonproject
我得到一个不同的版本号
0.0.1.dev1+g45f5696但不是0.1.0
发布于 2022-03-15 19:38:17
分支main
和v0.1.0
没有pyproject.toml,所以您需要添加该文件。
version_scheme
应该在[tool.setuptools_scm]
而不是[build-system]
之下
# pyproject.toml
[build-system]
requires = ["setuptools>=45", "setuptools_scm[toml]>=6.2"]
[tool.setuptools_scm]
version_scheme = "release-branch-semver"
这将给你0.1.0.dev1+g45f5696
。
您可以在本地检查版本号:
python setup.py --version
释放枝
git签出-b主git签出-b v0.1.0
如果您在发布分支上(例如v0.1
、release-0.1
),那么补丁版本就会遇到麻烦。
如果您使用的是main
或功能分支,则会遇到次要版本。
标记名称和分支名称不应该完全相同。
发布分支名称通常只包含次要版本:
git checkout -b v0.1
pip-tools + setuptools_scm
因为setup.cfg
在setup_requires
中只有setuptools_scm
,而没有install_requires
,所以pip-compile
(没有选项)不会将它编译成requirements.txt,pip-sync
会卸载setuptools-scm
,所以必须在pip-sync
之后进行pip install setuptools_scm
。
或者,您可以将setup = setuptools_scm
添加到[options.extras_require]
中。
# setup.cfg
...
[options]
setup_requires = setuptools_scm
...
[options.extras_require]
setup = setuptools_scm
用法:
pip-compile --extra setup -o setup-requirements.txt
pip-sync setup-requirements.txt
参考文献:
发行版本
setuptools_scm
主要生成开发和发布后版本。
要生成像0.1.0
这样的发布版本,可以将一个可调用的
# content of setup.py
def myversion():
from setuptools_scm.version import SEMVER_MINOR, guess_next_simple_semver, release_branch_semver_version
def my_release_branch_semver_version(version):
v = release_branch_semver_version(version)
if v == version.format_next_version(guess_next_simple_semver, retain=SEMVER_MINOR):
return version.format_next_version(guess_next_simple_semver, fmt="{guessed}", retain=SEMVER_MINOR)
return v
return {
'version_scheme': my_release_branch_semver_version,
'local_scheme': 'no-local-version',
}
setup(use_scm_version=myversion)
参考资料:scm#导入setuppy
发布于 2022-03-14 16:34:48
可以通过在变量中设置相应的pyproject.toml
来更改版本方案。
[tool.setuptools_scm]
version_scheme = "release-branch-semver"
然后,可以创建具有SemVer名称的分支,以增加版本号。例如:
$ git tag
v1.0.0
$ git checkout main
Already on 'main'
$ python -m setuptools_scm
1.1.0.dev1+gdaf07ef
$ git checkout -b 1.0.1
Switched to a new branch '1.0.1'
$ python -m setuptools_scm
1.0.1.dev1+gdaf07ef
如果您使用的是setup.py
,您可以按照以下方式配置它:
setup(
use_scm_version={
'version_scheme': 'release-branch-semver',
},
)
发布于 2022-03-13 15:39:29
如果我正确地读取了文档,这很可能意味着您应该像这样创建分支(假设当前版本为0.x):
main (main development branch)
1.0 (release branch for 1.0)
2.0 (development branch for 2.0)
我的理解是,这是这样的分析:
医生说
具有发布分支的项目的语义版本控制。与在发布分支上增加预发布段或微段相同:一个分支,其名称(忽略名称空间)被解析为与最近的标记相匹配的版本。否则,如果在非释放分支上,增加次要段并将微段设置为零,则追加.devN。
我对此的理解是:
你想做一个新版本。所以你把它放在一个叫做2.0
的分支上。由于程序知道您的上一个版本是2.0.0
,所以您的新版本将被称为2.0.1
。
基本上,它会自动增加版本标签上的微版本。
https://stackoverflow.com/questions/71090408
复制相似问题