术语表
什么是 Worktree 隔离?
TL;DR
Worktree 隔离是指每个 AI 智能体都在自己的文件夹中、在自己的分支上拥有一份独立的代码副本。这样多个智能体就能同时编辑相同的文件而不会互相覆盖。你的主检出目录在合并之前不会被动到。Pane 会为每个 Pane 自动设置好这一切。
Worktree 隔离是指每个 AI 智能体都在自己的文件夹中、在自己的分支上使用一份独立的代码副本。这样多个智能体就能同时修改相同的文件而不会互相覆盖,你的主检出目录在合并之前也不会被动到。
问题
共享一个文件夹的智能体迟早会互相覆盖。
你让智能体 A 重写登录页,让智能体 B 添加注册流程。两者都需要修改 auth.ts。在同一个共享文件夹里,智能体 B 保存了自己的版本,悄悄替换掉了智能体 A 的修改。两个智能体都没有察觉,你要到后来才发现。
所以让多个智能体在同一个目录里工作是在赌运气。在两个智能体碰到同一个文件之前一切正常,一旦碰到,就会有人的工作丢失。
解决办法
每个智能体一个 worktree:文件和分支独立,历史共享。
给每个智能体一个自己的 git worktree:一个独立的文件夹,带有独立的分支,共享同一份历史。智能体 A 在一个 worktree 中工作,智能体 B 在另一个中工作,两者都能编辑 auth.ts,因为它们编辑的是不同的副本。
my-project/ ← main branch, untouched
my-project/worktrees/
├─ login-rewrite/ ← agent A, branch login-rewrite
└─ signup-flow/ ← agent B, branch signup-flow哪些内容隔离,哪些内容共用
文件、分支和 shell 是独立的。历史、远程仓库和 git 对象是共享的。
| 隔离 | 共用 |
|---|---|
| 文件和未提交的修改 | Git 历史和提交 |
| 分支 | 远程仓库(origin) |
| shell 状态和环境变量 | Git 配置 |
| 工作目录 | 对象存储,可节省磁盘空间 |
Pane 如何完成隔离
Pane 会自动为每个 Pane 设置和清理 worktree。
创建 Pane 时,Pane 会交给它一个预先准备好的 worktree,为它创建新分支,复制你的 .env 文件、智能体设置和 node_modules,然后在那里启动智能体。归档 Pane 时,Pane 会检查有没有未保存的工作,再删除 worktree。你从来不用自己输入 git worktree add。
隔离覆盖不到的地方
worktree 让智能体的文件彼此分开,但不会限制智能体能做什么。
worktree 是一个文件夹,不是沙盒。智能体仍以你的用户权限运行,所以一个智能体可以通过路径读取另一个 worktree 的文件、访问网络,或修改仓库之外的东西。实际上智能体通常会待在自己的工作文件夹里,但如果你需要严格限制,请在容器或 VM 中运行它们。
有些东西在 git 之外是共享的:应用使用的数据库、开发服务器端口、全局包缓存。Pane 会在 PANE_PORT 中给每个 Pane 分配一段独立的端口;对于数据库,可以用初始化脚本或能为每个 worktree 创建独立数据库的工具。
相关内容
来源
- 勘误
- 如果这里有任何错误或过时的内容,请告诉我们,我们会修正并更新顶部的日期。 在 GitHub 上提交 issue
- 来源
常见问题
作者 Parsa Khazaeepoul,Pane 联合创始人。 .