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 工作流
相关推荐
码码哈哈0.04 分钟前
macos26 Liquid class 示例代码
前端
hhemin18 分钟前
web前端给项目加入skills目录,Ai自动查找技能(后端也能参考)
前端
代码煮茶23 分钟前
Vue3 组件库二次封装实战 | 基于 Element Plus 封装企业级 UI 组件库
前端·javascript·vue.js
KaMeidebaby23 分钟前
卡梅德生物技术快报|单克隆抗体人源化 PEG 修饰质控方法体系构建与验证
服务器·前端·数据库·人工智能·算法·百度·新浪微博
元宵大师30 分钟前
[升级V2.1.5]回测模块重构:参数确认+异步进度+日志持久化!本地Web版多因子轮动系统
前端·重构
咋吃都不胖lyh39 分钟前
限流重试、指数退避、随机抖动
前端
澈2071 小时前
Git入门指南:核心概念与实用操作
大数据·git·搜索引擎
Naisu Xu1 小时前
Mac上安装Homebrew、Git、Python等环境记录
git·python·macos·终端·brew
之歆1 小时前
DAY_11JavaScript BOM与DOM深度解析:底层原理与工程实践(上)
开发语言·前端·javascript·ecmascript