Cargo 是否使用带有 Git 标签的 semver?

Does Cargo use semver with Git tags?

我的印象是它没有,但我找不到这方面的任何具体文档。 Cargo 是否像处理 crates.io 上的板条箱一样处理 Git 上符合 semver 的标签,即 cargo update 将板条箱更新为最新的非破坏版本?

更具体地说,给定以下 Cargo.toml 片段并假设 "crate" 的最新版本是 1.0.1 并且 "git_crate" 存在 1.0.1 标签,则 1.0将下载 "crate" 的 .1 版本。 cargo install 是否也会为 "git_crate" 获取 1.0.1 标签,还是会使用 1.0.0 标签?

[dependencies]
crate = "1.0.0"
git_crate = { git = "https://git@example.com/git_crate.git", tag = "1.0.0" }

Git 标签是自由格式的;例如,完全有可能将您的提交标记为 foobar 并且没有人会眨眼。 Semver 是人们用于标签的常见趋势;然而,这甚至是一个常数吗?有些人使用 x.y.z,其他人使用 vx.y.z

因此,cargo 将选择您指定的 exact 标签。您可以通过使用 git daemon 在临时端口(默认为 9418)上支持您的 repo,然后添加 git repo 及其标签来说服自己。当端口启动并且守护程序可用时,您将看到以下内容(但没有有效的 git 存储库):

Caused by:
  Unable to update http://localhost:9418/?tag=1.0.0

因此确认 cargo 所做的唯一一件事就是获得您提到的确切标签。这再次完全符合预期。