ARTICLE · 983534
多开 AI 助手总在文件打架?用 Git Worktree 实现真正安全的并行编码
并排跑四个助手,仓库得先切开
终端里同时亮着四个会话。左边 Claude Code 在改登录接口,右边 Codex 在补测试,OpenCode 还在翻样式,Pi 已经开始提交前自检。二十来分钟后 git status 一片红,同一个函数被改了两遍,有一处直接没了。

不是模型突然变笨。是四只手伸进同一份工作副本里。Orca 把默认动作改成:每个助手进自己的 git worktree——同一套提交历史,磁盘上却是分开的检出。一份提示可以同时扇到五个隔离副本里,比完再合赢家。仓库在 stablyai/orca,MIT 协议,桌面有 macOS、Windows、Linux,手机也能配对指挥。
很多人把“并行”理解成多开几个终端标签。标签便宜,文件只有一份。标签再多,写到磁盘上还是互相覆盖。
🖥️ 多开窗口解决不了文件打架
家里装修要是四支施工队挤在同一套水电线路上,你不会指望他们“自己协调好”。编程助手也一样。它们看见的是当前工作区里的文件,写盘的时候不会先问隔壁会话同不同意。你在 A 窗让它重构接口,B 窗让它补测试,两边读到的都是同一份源码,后写完的那次会把先写完的那次踩掉。
后果来得很快。未提交改动只能先 stash,切分支时弹出冲突,锁文件被两个进程同时写。更烦的是你分不清哪段是哪只助手留下的:diff 是混在一起的,回滚得整段猜。并行本该省时间,收尾却变成一次人工考古。
git worktree 干的事很具体:主仓库的对象库只留一份,每个任务再挂一个独立的工作目录和分支。提交、树对象、blob 还是那套,不按助手数量整仓复制。工作区文件各写各的,终端、编辑器标签、浏览器页也绑在对应副本上。Orca 说自己是 worktree-native,指的就是这个,不是把聊天窗并排摆好看。
并行安全不来自“它们会互相躲开”,而来自它们根本碰不到同一组文件。
扇出上限在产品说明里写得很死:一份提示分给五个助手,五个隔离副本,最后比较、留下赢家。五个是产品设定,不是我测出来的吞吐峰值。理论上你还可以给五个副本派完全不同的任务,互不等待;也可以把同一句话扔五次,看谁写得能过你的验收。两种用法都有人在用,哪个浪费订阅、哪个真能比出差距,得看任务本身散不散。
终端分屏是另一层皮。Orca 用偏 Ghostty 那种 WebGL 渲染,分屏次数没有写成上限,滚动历史重启后还在。窗口漂亮解决的是盯梢,解决不了写盘冲突。把四个会话贴在同一块屏幕上,文件还是那一份的话,冲突只是从“看不见”变成“看得更清楚”。
🧬 隔离的是磁盘上的检出,不是聊天窗
创建流程底层就是两步:先 git fetch,再 git worktree add。界面里要填任务名、起始引用、要挂的 GitHub / Linear 工单,以及跑哪家助手、跑在本机还是远程。引用可以是本地分支、远程分支、提交哈希。创建在后台跑,侧栏先出现一行进度,失败能取消或重试。副本是真检出,git status、rebase、cherry-pick 都能用,不是 IDE 自己发明的沙盒目录。
每个 worktree 自带分支、自带磁盘文件、自带助手终端。切来切去的时候,创建哪怕还没完成也可以先看别的任务。CLI 也能建:orca worktree create,卡片上会标这是命令行开出来的。智能体自己也能调 Orca,仓库把 worktree create、snapshot、click、fill 列进同一套命令里,助手理论上可以自己开副本、自己点页面。
大目录另说。node_modules、.cache 这类被 gitignore 的目录,能在 orca.yaml 里写成 worktree.sharedDirectories。共享方式是符号链接,macOS 上也可以走 APFS 的克隆拷贝,不是整目录再复制一份。条件也死:必须在主检出里已经存在,而且必须已被忽略;已被跟踪或根本不存在的路径会直接跳过。.worktreeinclude 只认字面路径,通配和取反都会被跳过并警告。把依赖目录链到一起之后,隔离还算不算隔离,社区里本来就有两种声音,我也不想写成定论。
README 上的功能表自己都承认永远落后。他们按天发版,changelog 才是清单。顺手翻到桌面页上的下载数字和 GitHub 星标对不上,以仓库页面当时显示的为准就行。
SSH 那条线把同一套模型搬到远程机器上:远端文件编辑、git、终端都在,自动重连和端口转发也写进说明。本机吃不住五个会话时,可以把重活丢到更胖的盒子上,侧栏看起来仍是同一组副本。Codex 在 SSH 场景里有过 hook 环境变量没注入的问题,状态显示本地已安装、远端实际没挂上。Claude 的 hook 写在配置文件里,同一条远程路径上反而没这事。远程能跑,不等于每家助手的集成深度一样。
🧹 五个副本跑完,谁来收拾残局
并行的第二笔账在收摊。五个工作目录、五条分支、五组未合并提交,侧栏会慢慢堆成一堵墙。有人问怎么防止 worktree 铺开,这不是抬杠:共享对象库确实让四份副本几乎不加倍占用提交历史,可未跟踪的 .env、各自生成的构建产物,该占的盘还是占。对象库省的是 git 元数据,不是你随手留下的垃圾。
Orca 给的收口在资源管理器。清理入口会列出本地、主仓库、SSH 上的工作区,删之前能先看一眼。侧栏能滤掉休眠的、自动化建的、别的客户端建的。批量删会拿掉磁盘目录;分支若因未合并提交被 git 拒绝删除,Orca 会留下这些分支,并弹出复查提示。单删、多选删、连子孙一起删,以及先休眠再关面板,都在同一套动作里。保留分支等于承认 git 比界面更谨慎,这点我接受。
手机端是另一条收口。桌面跑着助手,iOS 能走 App Store 或 TestFlight,Android 提供 APK,配对之后能看完成通知、补一句后续指令。你不必一直盯着分屏。账号切换和用量跟踪对着 Claude、Codex 的额度与限速重置,换号不用重新走登录。设计模式则把真实 Chromium 窗口里的元素点一下,HTML、CSS 和裁过的截图直接进提示。这些都不改变 worktree 模型,只是让你少在五个窗口之间徒手搬运上下文。
扇出很便宜,残留的工作区不便宜。
GitHub 和 Linear 做在应用内:工单、PR、看板能直接开成副本,评审不用切浏览器。AI diff 可以按行批注再扔回助手,提交也在同一个上下文里做。编辑器按 VS Code 那套,自动保存,文件和图片能拖进提示。这些是编排层,不是模型本身。Orca 管的是助手在哪份检出上跑、跑完你怎么看、看完怎么合,不负责让某一家模型突然变准。
有人同一提示扇五次,赌五个实现里总有一个能过测试;有人五个副本派五个互不相关的工单,把等待时间错开。两种都说得通。我更怕的是第三种:五个都跑完,没有人删。
🛠️ 先开一组能扔掉的副本
桌面安装走 onorca.dev,或直接拿构建包:Apple Silicon / Intel 的 dmg、Windows 的 exe、Linux 的 AppImage。macOS 也能用 Homebrew。
brew install --cask stablyai/orca/orca装完能打开应用。Arch 则是 AUR 上的 stably-orca-bin,源码包是 stably-orca-git。无图形的 Linux 要跑 orca serve,得另看他们的无头服务说明,别拿桌面包硬套。
打开一个已经是 git 仓库的项目。新建 worktree 时把起始引用指到你想分叉的点,任务名写人话,助手先只选两家——Claude Code 和 Codex 就够做对照。五个一起上,第一步往往看不过来。Orca 会给常见 CLI 预填跳过确认的启动参数,理由写在文档里:副本本来就可以扔,合入前你还能挑 diff。
⚠️ 注意:跳过确认等于把该副本里的命令权交给助手。只在你准备丢弃的 worktree 里开,别在主检出上用同一套参数。
命令行要自己建的话,先在设置里登记 Orca CLI,再用仓库 id 和任务名开副本:
orca worktree create --repo id:<REPO_ID> --name compare-login --json <REPO_ID> 换成应用里那个仓库编号。跑完侧栏应出现新卡片,悬停能看到 CLI 来源。列表和删除也走同一套命令:
orca worktree ps --jsonorca worktree rm --worktree id:<WORKTREE_ID> --force --json容易出错的地方是仓库还没被 Orca 收录,或者 id 填成了本地路径。ps 先看一眼再删。依赖目录要共享的,在主检出忽略名单里确认 node_modules 存在后,再写进 orca.yaml,新建的副本才会走链接,旧副本不会自动补上。
它声称能跑任何终端里的 CLI 助手:Claude Code、Codex、OpenCode、Pi 是推文点名的四家,名单上还有 Grok、Cursor、GitHub Copilot、MiMo Code 以及一长串同类工具。集成深度不一样,用量跟踪和热切换目前点名的是 Claude 与 Codex。主检出继续给人用,并行任务全部进副本,合入前只看 diff。这是我准备长期留着的用法。
五个隔离副本并排跑,解决的是文件打架,不是模型意见统一。用完进资源管理器把不要的工作区清掉,别让对象库虽共享、磁盘上的残骸各自为政。主仓给人,副本给助手,合入前只留一份 diff。
如果你觉得这篇内容对你有启发,欢迎在留言区聊聊你的看法。
关注我,我会持续分享高质量的技术与思考干货。👇