SuperAPI AI 工具集

cargo-worktree-builds

编程与开发

查看项目

更新于 10-16 06:22

技能介绍

用途:当把并行智能体分发到同一个 Rust 仓库的多个 git worktree(每个 issue/feature 一个)时,默认每个 worktree 各自构建 target/,依赖会被重复冷编译,N 个 worktree 约等于 N 倍时间和 N 倍磁盘。本技能让所有 worktree 指向一个共享且预热过的 CARGO_TARGET_DIR,依赖只编译一次并被复用。

主要能力:依赖图在各 worktree 间相同,共享目录可复用依赖产物,仅每个 worktree 自身的 crate 需要重编译;cargo 的构建锁会串行化并发构建,避免目录损坏并限制 CPU/I/O 争用;磁盘占用保持约 1 倍而非 N 倍。

使用方式:先选一个位于任何 worktree 之外、且与检出在同一磁盘上的持久路径,例如 export SHARED_TARGET="$HOME/.cache/<repo>-target"; mkdir -p "$SHARED_TARGET"。分发智能体前先预热一次:CARGO_TARGET_DIR="$SHARED_TARGET" cargo fetch 与 CARGO_TARGET_DIR="$SHARED_TARGET" cargo build。之后每个 worktree 的 cargo/just 命令都加上同一前缀,例如 CARGO_TARGET_DIR="$SHARED_TARGET" just check 或 CARGO_TARGET_DIR="$SHARED_TARGET" cargo test。

适用场景:一个 Rust 仓库被分发到多个 git worktree 并行运行 cargo/clippy/test;各 worktree 重复重建相同依赖;N 个 worktree 的 target/ 占满磁盘。不适用:单一工作树(默认 target/ 已最优)、CI 依赖缓存(用 Swatinem/rust-cache@v2)、单次构建加速(用更快的链接器或 cargo check)、跨机器共享(用 sccache)。

限制与注意:共享锁下并发构建偶尔会读到正在重建的过期 rlib,出现“method not found”等虚假编译错误,并非真实代码问题;可 touch src/lib.rs 后重跑,例如 touch src/<file>.rs && CARGO_TARGET_DIR="$SHARED_TARGET" cargo test。跨磁盘放置会强制复制而非硬链接。也可用 .cargo/config.toml 的 build.target-dir,但会提交路径,临时 worktree 更推荐环境变量。资料未提供收费、价格或平台信息。