首页 > 数据库 > 数据库开发技术 > Rust 工程版本管理
在 Rust 项目中进行版本的指定有两种的方式:
[package]
name = "my_project"
version = "0.1.0"
在这个例子中,项目的版本被设置为 0.1.0。你可以根据项目的更新情况逐步增加版本号。
git tag -a v0.1.0 -m "Version 0.1.0"
这个命令会给当前仓库打上一个名为 v0.1.0 的标签,并添加一条描述信息, 严格来说,通过git tag为人工命令创建的标签,通常在发布新的稳定版本会使用,但在日常开发中,可能不能严格遵守 tag 的版本号和名称与toml中的名称一致,因此需要小心处理。在创建工程或新建添加依赖crate时,可手动指定版本,也可指定 git 的 commit token 或 branch。
[dependencies]
serde = { version = "^1", default-features = false, features = ["derive"] }
heapless = { version = "^0.7", features = ["serde"] }
no-std-net = { version = "^0.5", features = ["serde"] }
#atat = { version = "0.19", features = ["derive"] }
atat = { git = "https://github.com/BlackbirdHQ/atat", rev = "31a45fc", features = [
"derive",
"bytes",
] }
hash32 = "0.2.1"
hash32-derive = "^0.1.0"
embassy-time = "0.1"
如上所示,通过version以及git的rev属性来指定所依赖的包版本。
Semantic Versioning的规定,通过约束关系和能推导整个项目版本依赖是否满足要求。Semantic Versioning(https://semver.org/)规定了版本的格式和变更规范:版本格式包括:主版本号(MAJOR),次版本号(MINOR),修订号(PATCH),
版本号递增规则如下:
可以添加标签到版本号的后面作为补充.
以下关键词 MUST、MUST NOT、REQUIRED、SHALL、SHALL NOT、SHOULD、SHOULD NOT、 RECOMMENDED、MAY、OPTIONAL 依照 RFC 2119 的叙述解读。
例如:1.0.0 < 2.0.0 < 2.1.0 < 2.1.1。
例如:1.0.0-alpha < 1.0.0。
例如:1.0.0-alpha < 1.0.0-alpha.1 < 1.0.0-alpha.beta < 1.0.0-beta < 1.0.0-beta.2 < 1.0.0-beta.11 < 1.0.0-rc.1 < 1.0.0。
可以在Cargo.lock文件中查看所有依赖库的版本号,包括多重依赖。如下所示
[[package]]
name = "cfg-if"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "critical-section"
version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7059fff8937831a9ae6f0fe4d658ffabf58f2ca96aa9dec1c889f936f705f216"
[[package]]
name = "defmt"
version = "0.3.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a99dd22262668b887121d4672af5a64b238f026099f1a2a1b322066c9ecfe9e0"
dependencies = [
"bitflags",
"defmt-macros",
]
也可以使用图来查看各库的依赖拓扑关系,需要安装命令:
## 解析依赖库的关系
cargo install cargo-deps
## 根据依赖关系生成图片
brew install graphviz
命令使用如下
cargo deps --all-deps | dot -Tsvg > graph.svg
效果如下:
在 Rust 的语义化版本控制(Semantic Versioning)规范中,^ 和 ~ 通常用于指定依赖项的版本范围。它们分别表示不同的版本约束条件。
^符号:^ 符号用于指定一个兼容的最低版本,但允许次版本号和修订号发生变化,只要它们的主版本号与指定的版本相同。例如,如果您指定一个依赖项的版本为 ^1.2.3,则表示您允许使用任何 1.x.y 版本,其中 x 和 y 可以是任意的数字,但 x 必须等于 2。
~符号:~ 符号用于指定一个兼容的最低版本,但只允许修订号发生变化,主版本号和次版本号保持不变。例如,如果您指定一个依赖项的版本为 ~1.2.3,则表示您允许使用任何 1.2.x 版本,其中 x 可以是任意的数字,但 x 必须等于 3。
=符号:使用等号 = 指定一个确切的版本号。这表示您的项目依赖于特定的版本,只有该版本才会被接受,不允许任何其他版本的依赖项。例如,如果您在 Cargo.toml 文件中指定了一个依赖项的版本为 =1.2.3,则表示您的项目依赖于确切版本号为 1.2.3 的这个依赖项,不允许使用任何其他版本。当出现版本提示冲突,如果能通过冲突的库的版本号就能解决,则可考虑执行以下升级命令。
# 指定升级到此版本
cargo update defmt@0.4.0
# 让 cargo 决定升级到合适的版本
cargo update defmt
# 升级所有库的版本,不一定会成功
cargo update
原文作者:Rust嵌入式;如有侵权,请联系管理员删除。