用 Git Worktree 实现安全并行 AI 编程
多个 AI 助手同时编码时文件冲突频发,Git Worktree 通过隔离工作目录让每个助手各写各的。Orca 基于此理念提供桌面工具,支持最多五个隔离副本、远程 SSH、CLI 与移动端管理,帮助开发者安全并行使用 Claude Code、Codex 等工具并轻松清理残留。
并行运行多个 AI 编码助手时,文件冲突几乎不可避免。Git Worktree 通过为每个任务创建独立的工作目录和分支,让多个助手在同一仓库历史下各写各的,从根本上避免互相踩踏。Orca 正是基于这一思路开发的桌面工具,可将同一提示扇出到五个隔离副本,跑完再比较选择最优结果。
很多人把“并行”理解成多开几个终端标签。标签便宜,文件只有一份。标签再多,写到磁盘上还是互相覆盖。
多开窗口解决不了文件打架
编程助手看见的是当前工作区里的文件,写盘的时候不会先问隔壁会话同不同意。你在 A 窗让它重构接口,B 窗让它补测试,两边读到的都是同一份源码,后写完的那次会把先写完的那次踩掉。
后果来得很快:未提交改动只能先 stash,切分支时弹出冲突,锁文件被两个进程同时写。更烦的是 diff 混在一起,回滚得整段猜,收尾变成一次人工考古。

Git worktree 干的事很具体:主仓库的对象库只留一份,每个任务再挂一个独立的工作目录和分支。提交、树对象、blob 还是那套,不按助手数量整仓复制。工作区文件各写各的,终端、编辑器标签、浏览器页也绑在对应副本上。
并行安全不来自“它们会互相躲开”,而来自它们根本碰不到同一组文件。
Orca 的扇出上限是五个:一份提示分给五个助手,五个隔离副本,最后比较留下赢家。你也可以给五个副本派完全不同的任务,或者把同一句话扔五次,看谁写得能过验收。
终端分屏只是让盯梢更方便,解决不了写盘冲突。
隔离的是磁盘上的检出,不是聊天窗
创建流程底层就是两步:先 git fetch,再 git worktree add。界面里要填任务名、起始引用、要挂的 GitHub / Linear 工单,以及跑哪家助手、跑在本机还是远程。引用可以是本地分支、远程分支、提交哈希。副本是真检出,git status、rebase、cherry-pick 都能用。
每个 worktree 自带分支、磁盘文件和助手终端。创建可在后台运行,侧栏显示进度。CLI 也能建:
orca worktree create --repo id:<REPO_ID> --name compare-login --json
智能体自己也能调 Orca,仓库把 worktree create、snapshot、click、fill 列进同一套命令里,助手理论上可以自己开副本、自己点页面。
大目录另说。node_modules、.cache 这类被 gitignore 的目录,能在 orca.yaml 里写成 worktree.sharedDirectories。共享方式是符号链接,macOS 上也可以走 APFS 的克隆拷贝。条件也死:必须在主检出里已经存在,而且必须已被忽略;已被跟踪或根本不存在的路径会直接跳过。worktreeinclude 只认字面路径,通配和取反都会被跳过并警告。
SSH 模式把同一套模型搬到远程机器:远端文件编辑、git、终端都在,自动重连和端口转发也写进说明。本机吃不住五个会话时,可以把重活丢到更胖的盒子上。注意 Codex 在 SSH 场景里可能存在 hook 环境变量没注入的问题,而 Claude 的 hook 写在配置文件里则没这事。
五个副本跑完,谁来收拾残局
五个工作目录、五条分支、五组未合并提交,侧栏会慢慢堆成一堵墙。共享对象库确实让四份副本几乎不加倍占用提交历史,可未跟踪的 .env、各自生成的构建产物,该占的盘还是占。
Orca 的资源管理器提供收口:列出本地、主仓库、SSH 上的工作区,删之前能先看一眼;侧栏能滤掉休眠的、自动化建的、别的客户端建的。批量删会拿掉磁盘目录;分支若因未合并提交被 git 拒绝删除,Orca 会留下这些分支,并弹出复查提示。
手机端是另一条收口:iOS 走 App Store 或 TestFlight,Android 提供 APK,配对后能看完成通知、补一句后续指令。账号切换和用量跟踪对着 Claude、Codex 的额度与限速重置。
GitHub 和 Linear 做在应用内:工单、PR、看板能直接开成副本,评审不用切浏览器。AI diff 可以按行批注再扔回助手,提交也在同一个上下文里做。这层是编排,不负责让模型变准。
先开一组能扔掉的副本
桌面安装走 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 预填跳过确认的启动参数,但注意:跳过确认等于把该副本里的命令权交给助手,只在你准备丢弃的 worktree 里开,别在主检出上用。
命令行自己建的话,先在设置里登记 Orca CLI,再用仓库 id 和任务名开副本(把 <REPO_ID> 换成应用里的仓库编号):
orca worktree create --repo id:<REPO_ID> --name compare-login --json
列表和删除也走同一套命令:
orca worktree ps --json
orca worktree rm --worktree id:<WORKTREE_ID> --force --json
容易出错的是仓库还没被 Orca 收录,或 id 填成了本地路径。先 ps 看一眼再删。依赖目录要共享的,在主检出忽略名单里确认 node_modules 存在后,再写进 orca.yaml,新建副本才会走链接。
Orca 声称能跑任何终端里的 CLI 助手:Claude Code、Codex、OpenCode、Pi 是点名的四家,名单上还有 Grok、Cursor、GitHub Copilot、MiMo Code 以及更多。目前用量跟踪和热切换点名支持 Claude 与 Codex。
五个隔离副本并排跑,解决的是文件打架,不是模型意见统一。用完进资源管理器把不要的工作区清掉,别让对象库虽共享、磁盘上的残骸各自为政。主仓给人,副本给助手,合入前只留一份 diff。





暂无评论,期待您的发言...