WHAT - git worktree 概念

文章目录

简单来说,它允许开发者在同一个 Git 仓库 下,同时检出多个分支到不同的工作目录,而不需要克隆多份仓库。

核心概念

通常一个 Git 仓库只有一个工作目录(working tree),同一时间只能 checkout 一个分支。git worktree 打破了这个限制,让你可以:

  • 主仓库在 main 分支开发
  • 同时在另一个目录里 checkout feature-x 分支
  • 再开一个目录 checkout hotfix 分支

所有这些 worktree 共享同一个 .git 目录(对象、引用、配置都共享),只是工作区独立。

常用命令

bash 复制代码
git worktree add ../project-feature feature-x

git worktree add -b hotfix-login ../project-hotfix main

git worktree list

git worktree remove ../project-feature

git worktree prune

典型使用场景

  1. 紧急 hotfix:当前分支改了一半不想 stash,直接开个新 worktree 修 bug
  2. 并行开发:多个 feature 同时进行,互不干扰
  3. 代码对比/review:在一个目录跑旧版本,另一个目录跑新版本
  4. 跑长时间任务:一个 worktree 跑测试/构建,另一个继续写代码
  5. AI Agent 并行任务:比如 Cursor 的 best-of-n-runner、Claude Code 的并行 agent,都是基于 worktree 实现隔离的

注意事项

  • 同一个分支不能在两个 worktree 同时 checkout (除非用 --force
  • 删除 worktree 目录后,记得跑 git worktree prune 清理元数据
  • worktree 的元信息存在主仓库 .git/worktrees/
  • 子模块(submodule)在 worktree 中支持有限,需要注意

和 clone 的区别

git clone git worktree
磁盘占用 完整 .git 目录 ×N 共享 .git,只多工作区
创建速度 慢(要拉对象) 快(秒级)
分支同步 需要 fetch 天然共享
隔离性 完全隔离 工作区隔离,对象共享

cursor best-of-n-runner

best-of-n-runner 是 Cursor 给Agent提供的一个子代理(subagent)类型 ,它的核心思想就是利用 git worktree 来做并行实验 / Best-of-N 尝试

它是什么

Run a task in an isolated git worktree. Each best-of-n-runner gets its own branch and working directory. Use for best-of-N parallel attempts or isolated experiments.

翻译过来:

  • 每个 best-of-n-runner 子代理会自动创建一个独立的 git worktree + 独立的分支
  • 在那个隔离环境里执行任务
  • 不会污染开发者当前的工作区

"Best-of-N" 是什么意思

这是 AI 领域常见的策略:让 N 个 agent 并行做同一件事,然后挑最好的一个结果

比如:

  • 让 3 个 agent 各自实现"图表懒加载",最后对比谁的方案最干净
  • 让 5 个 agent 各自尝试修同一个 bug,看哪个修得对
  • 让 2 个 agent 用不同技术栈实现同一个功能(一个用 Jotai,一个用 Zustand),对比

因为每个 runner 在自己的 worktree + 自己的分支里跑,它们:

  • 互不干扰(不会同时改一个文件冲突)
  • 可以真的跑 build/test 验证
  • 完事后开发者可以 git diff 对比,或者 cherry-pick 最满意的那份

典型使用方式

开发者可以这样并行启动多个:

复制代码
并行启动 3 个 best-of-n-runner:
  - runner A: 用方案1实现 X
  - runner B: 用方案2实现 X  
  - runner C: 用方案3实现 X

完成后 → 对比 3 个分支的 diff → 选最优

每个 runner 跑完后,会留下一个分支(比如 agent/best-of-n-xxx-1agent/best-of-n-xxx-2),你可以:

bash 复制代码
git worktree list
git diff main..agent/best-of-n-xxx-1
git diff agent/best-of-n-xxx-1..agent/best-of-n-xxx-2
git checkout agent/best-of-n-xxx-2

和普通 subagent 的区别

类型 隔离方式 适用场景
generalPurpose 共享当前工作区 普通的多步任务
explore 只读 探索代码库
shell 共享当前工作区 跑命令
best-of-n-runner 独立 worktree + 分支 并行实验、对比方案

什么时候会用

  • "试几种方案对比一下"
  • "并行让多个 agent 各自实现"
  • 重构方案不确定,想跑几个版本看效果
  • 想做对照实验(A/B 实现)

什么时候不适合

  • 任务很明确,只有一个正确解法 → 浪费算力
  • 任务有先后依赖 → 用不上并行
  • 改动很小(改个变量名)→ 杀鸡用牛刀

其他

  • 在当前仓库开个 worktree 来并行开发多个功能
  • 写个脚本/alias 来简化 worktree 工作流
相关推荐
IT_陈寒2 小时前
我竟然被JavaScript的隐式类型转换坑了三天!
前端·人工智能·后端
我亚索贼六丶2 小时前
二十六. AI基础概念之如何更好的使用AI
前端
小码哥_常2 小时前
安卓启动页Logo适配秘籍:告别“奇形怪状”的展示
前端
我亚索贼六丶2 小时前
二十五.Electron 初体验与进阶
前端
当时只道寻常2 小时前
像使用 Redis 一样操作 LocalStorage
前端·前端工程化
RONIN2 小时前
UI组件库elementplus
前端
汤姆Tom2 小时前
从 0 到 1 开发项目?你是否也是这样开始?先有再优化一步一步带你了解架构设计
前端·后端·架构
review445432 小时前
基于 Cursor 实现智能代码审查skill
前端
muskk6 小时前
一个文件,9万星:Karpathy 用 4 条规则治好了 AI 写代码的"坏毛病"
前端·后端