在 Debian 上对 Rust 代码进行版本控制
一 环境与工具
- 安装并初始化 Git:sudo apt update && sudo apt install -y git;随后配置全局身份:git config --global user.name “Your Name”;git config --global user.email “you@example.com”。
- 安装 rustup(Rust 官方工具链管理器):curl --proto ‘=https’ --tlsv1.2 -sSf https://sh.rustup.rs | sh;执行 source “$HOME/.cargo/env” 后可用 rustup show、rustup update、rustup default 管理工具链。
- 建议同时安装常用质量工具:rustup component add rustfmt clippy;cargo fmt、cargo clippy 分别用于代码格式化和静态检查。
二 版本控制的核心做法
- 使用 Git 进行源码版本管理,按功能或修复创建分支(如 main/develop/feature/x),提交信息清晰规范,必要时使用 Pull Request/Merge Request 进行代码评审与合并。
- 采用 语义化版本(SemVer) 管理发布版本:在 Cargo.toml 的 [package] 中维护 version = “X.Y.Z”;遵循 MAJOR.MINOR.PATCH 的变更规则,0.y.z 为开发阶段,1.0.0 起 API 视为稳定。
- 用 Git 标签 标记发布点:git tag -a v0.1.0 -m “Release 0.1.0”;推送标签到远端:git push origin v0.1.0(或 --tags 推送全部标签)。
- 依赖版本控制:常规依赖在 Cargo.toml 中指定版本范围(如 ^1.2);若需锁定到特定提交或分支,可使用 git 依赖:{ git = “https://github.com/xxx/yyy”, rev = “” },便于可重复构建与回溯。
三 推荐分支与发布流程
- 分支策略:采用 GitHub Flow 或 Git Flow。示例(GitHub Flow):从 main 创建特性分支 feature/x;完成后在远端发起 PR;合并后删除特性分支;需要发布时从 main 打标签 vX.Y.Z 并推送。
- 发布流程要点:
- 在本地 main 上确保版本号已更新(Cargo.toml 的 version)。
- 运行测试与质量检查:cargo test;cargo fmt --check;cargo clippy。
- 打标签并推送:git tag -a v0.2.0 -m “Release 0.2.0”;git push origin v0.2.0。
- 若发布到 crates.io,执行 cargo publish(需登录与权限)。
四 可选 使用 Jujutsu 提升体验
- Jujutsu(jj) 是用 Rust 编写的现代化版本控制系统,与 Git 仓库 100% 兼容,可在现有 Git 仓库中直接使用,提供更顺手的变更管理与撤销体验。
- 在 Debian 上可通过 Cargo 安装:cargo install --locked --bin jj jj-cli;常用命令:jj init / jj git clone、jj status、jj log、jj new、jj describe、jj branch、jj rebase、jj squash、jj abandon、jj restore 等。适合希望减少暂存、rebase 与冲突处理成本的团队。
五 常用命令清单
- 环境与工具
- 安装与配置:sudo apt install -y git;git config --global user.name/email;curl … | sh && source “$HOME/.cargo/env”;rustup show/update/default ;rustup component add rustfmt clippy。
- 代码与版本
- 仓库与协作:git init;git clone ;git add/commit -m “msg”;git push -u origin main;git pull;git branch/checkout -b;git merge;git remote -v。
- 标签与发布:git tag -a vX.Y.Z -m “msg”;git push origin vX.Y.Z(或 --tags);Cargo.toml version 同步更新;cargo test/ fmt --check/ clippy;cargo publish(发布到 crates.io)。