CentOS下Rust项目的版本控制实践
一 版本控制的范围与原则
| 维度 | 需要纳入版本控制 | 是否纳入版本控制 | 说明 |
|---|---|---|---|
| 工具链版本 | 是 | 是 | 使用项目根目录的 rust-toolchain.toml 锁定编译器版本 |
| 依赖版本 | 是 | 是 | Cargo.toml 声明范围,Cargo.lock 锁定精确版本 |
| 本地目录覆盖 | 否 | 否 | rustup override 仅本地生效,不提交到仓库 |
| 环境变量切换 | 否 | 否 | RUSTUP_TOOLCHAIN 仅当前进程生效,不提交到仓库 |
上述组合确保团队成员与 CI 使用一致的编译器与依赖版本,避免“在我机器上能跑”的问题。
二 工具链版本控制
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh,然后执行 source "$HOME/.cargo/env" 使环境变量生效。rustup toolchain list,更新工具链 rustup update。[toolchain]
channel = "1.75.0"
components = ["rustfmt", "clippy"]
targets = ["x86_64-unknown-linux-gnu", "wasm32-unknown-unknown"]
profile = "minimal"
cargo +1.75.0 build) > 环境变量 RUSTUP_TOOLCHAIN > 工具链文件 rust-toolchain.toml > 目录覆盖(rustup override) > 全局默认(rustup default)。rustup show(可看到来源,如“override”、“toolchain file”等)。cargo +stable test、cargo +beta test、cargo +1.70.0 build。cargo +nightly-2024-01-15 test。rustup override set 1.75.0;取消:rustup override unset。三 依赖版本控制
cargo new my_project && cd my_project。[dependencies]
serde = { version = "1.0", features = ["derive"] }
rand = "0.8"
cargo update(会更新 Cargo.lock 中的具体版本)。cargo build、cargo test。cargo tree(便于审视传递依赖)。cargo check、cargo test,必要时配合 cargo fix --edition 处理迁移问题,再提交 Cargo.toml 与 Cargo.lock 变更。四 团队协作与CI
git clone <repo-url> && cd <repo>;开发新功能或修复缺陷时创建分支:git checkout -b feature/x 或 git checkout -b fix/issue-123。git add .、git commit -m "feat: xxx"、git push origin feature/x;在 GitHub/GitLab 创建 Pull Request 进行代码审查与合并。cargo fmt --check、cargo clippy、cargo test,保证格式、静态分析与测试通过。name: CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@master
- run: cargo build --release
- run: cargo test -- --nocapture
- run: cargo fmt --check
- run: cargo clippy -- -D warnings
五 常见问题与排查
rustup show 检查来源;若存在 rust-toolchain.toml 或 override,以文件/覆盖优先;必要时移除本地覆盖:rustup override unset,或统一使用项目文件。cargo +1.70.0 build、cargo +nightly-2024-01-15 test;验证完成后恢复默认工具链即可。