cargo 中的语义版本控制系统

Cargo 和其他很多工具一样,遵循语义版本控制系统,程序库以

$$\text{major.minor.patch}$$

格式指定,其中

  • major:项目进行重大更新,且包含不向后兼容的功能
  • minor:仅在以向后兼容的方式添加新功能
  • patch:仅在以向后兼容的方式修复错误,并且没有添加任何新的功能

Cargo.toml 中,当我们指定了完整的版本号,如 1.0.0,那么 cargo 会帮我们拉取对应版本号的代码;

1
2
3
4
[dependencies]
serde = "1.0.0"
# 或者
# serde = { version = "1.0.0" }

当我们不关心补丁版本号时,如指定 1.0,那么 cargo 会帮我们拉取 1.0.* 的最高版本号对应的库,当我们只关心主版本号时,如指定版本号为 1,那么 cargo 会拉取主版本号为 1 对应的最新库。

虽然我们也可以直接指定最新的版本,如下,但是由于版本之间可能不兼容,所以强烈不推荐,并且 Crates.io 不允许上传具有通配符依赖关系的包。

1
2
[dependencies]
serde = "*"

我们也可以指定最低的版本号:

1
2
[dependencies]
serde = "^1.1.0"

上面的这种书写方式表示,使用最新的 1.*.* 的版本号,并且版本号至少为 1.1.0

以下是一些例子:

1
2
3
4
5
6
7
8
^1.2.3 := >=1.2.3 <2.0.0
^1.2 := >=1.2.0 <2.0.0
^1 := >=1.0.0 <2.0.0
^0.2.3 := >=0.2.3 <0.3.0
^0.2 := >= 0.2.0 < 0.3.0
^0.0.3 := >=0.0.3 <0.0.4
^0.0 := >=0.0.0 <0.1.0
^0 := >=0.0.0 <1.0.0

我们也可以指定更新最小版本,如果指定 major 版本,minor 版本和 patch 程序版本,或仅指定 major 版本和 minor 版本,则仅允许 patch 程序级别更改。如果仅指定 major 版本,则允许进行 minor 和 patch 级别更改。

1
2
[dependencies]
serde = "~1.1.0"

意思是我们可以使用版本 >=1.1.0 && < 2.0.0 的代码库。

一些例子:

1
2
3
~1.2.3 := >=1.2.3 <1.3.0
~1.2 := >=1.2.0 <1.3.0
~1 := >=1.0.0 <2.0.0

因为我们也可能直接从 GitHub 等网站上拉取代码库,所以我们可以直接指定

此外,cargo 还有很多其他的工具链可以下载,比如 cargo-edit 提供了 4 条命令:cargo add、cargo rm、cargo edit、cargo upgrade,使用 cargo install cargo-edit 即可下载安装这 4 条命令。

cargo add 时,我们可以直接指定需要的版本号,比如:

1
cargo add serde@1.0.0

更多详细内容可见 指定依赖


生活杂笔,学习杂记,偶尔随便写写东西。

作者

Edgar

发布于

2022-01-04

更新于

2022-07-27

许可协议

评论