快速结论
用 Git worktree 为 OpenCode 并行任务创建独立检出目录
链接工作树由 Git 管理;OpenCode 会在你打开的项目目录中运行。每个工作树都有自己的检出文件、索引和分支,同时共享 Git 历史与对象。只有当两个独立任务会互相覆盖同一工作区时,才值得创建工作树。它不能隔离数据库、环境服务、密钥或 Git 之外的生成文件。
OpenCode worktree 是 Git 的链接工作树:每个编码任务有自己的目录和分支,同时共享仓库历史。用 Git 创建工作树,进入新目录后再启动 OpenCode。它适合需要独立文件快照和审查边界的并行任务。
相关 OpenCode 指南: OpenCode Agents 与 AGENTS.md · OpenCode JSONC 配置 · OpenCode 权限 · OpenCode 会话存储.
1. Git 工作树会怎样影响 OpenCode
Git worktree 是连接到同一仓库的另一个工作目录。主目录可以留在 main,旁边的新目录则检出 work/auth。两个目录中的文件和当前分支各自独立;底层 Git 对象仍由仓库共享,因此通常不必为每个任务完整克隆一次仓库。
这个流程不需要 OpenCode 专用的 worktree 模式。进入新目录后启动 CLI,它就会把该目录作为项目上下文。全局 OpenCode 设置仍可能生效,但项目文件、未跟踪文件和本地环境不会自动复制到所有工作树。
2. 用三个安全步骤创建链接工作树
先检查当前目录的分支和改动。干净的起点能让你分清后续差异来自主任务还是新分支。从仓库根目录创建一个新分支,并把它检出到旁边的目录。不要把新工作树放进原仓库内部,以免目录关系变复杂。
下面的命令会在当前提交上创建 work/auth,并将工作目录放到 ../app-auth。如果分支已经存在,先确认它没有被其他工作树检出,再决定是否沿用。Git 通常不允许一个分支同时在多个链接工作树中处于检出状态。
从主仓库根目录运行。新分支从当前提交开始。
git status --short --branch
git worktree add -b work/auth ../app-auth
cd ../app-auth
opencode
git worktree list
git -C ../app-auth status --short --branch3. 从正确目录启动 OpenCode
执行 cd ../app-auth 后,在这个终端中运行 opencode。当前目录就是重要边界:每个工作树使用独立终端或会话,并先确认项目根目录再让代理改文件。可以先发只读任务,例如请 OpenCode 概括当前分支并列出准备检查的文件。
给每个会话分配明确任务,并在任务记录里写清分支名。例如一个工作树处理身份验证测试,另一个只更新文档。避免让两个会话同时改同一文件、运行重叠的数据迁移,或写入同一个生成目录。分开目录能减少文件冲突,但不会自动协调多个代理。
4. 避免分支、文件和服务冲突
工作树会分开受 Git 管理的文件和索引,但它不是容器或安全边界。本地数据库、测试服务器、缓存、Docker 项目和外部账号仍可能被多个会话共享。任务需要服务时,先给它独立数据库或 schema、端口、项目名,或使用一次性环境。
Git 只会从所选提交检出受跟踪文件。.env、本地证书、缓存和构建输出等未跟踪或忽略文件,不保证会出现在新工作树里。按需重建环境,通过批准的方式加载密钥,不要把密钥提交到 Git。代理工作前后都检查 git status --short --branch。
| 情形 | 工作树是否合适 | 启动前检查 |
|---|---|---|
| 独立功能,需要单独分支 | 适合 | 分配负责人和清楚的文件边界。 |
| 只读检查当前差异 | 通常不需要 | 第二个 OpenCode 会话可以读取同一目录。 |
| 两个任务共用本地数据库或服务 | 有条件适合 | 先分离 schema、端口或临时服务。 |
| 两个任务会修改相同文件 | 不适合 | 按顺序处理,或先拆分职责。 |
5. 审查、合并并安全清理
把新分支作为独立改动审查。检查 git diff,在该目录运行项目检查,并确认分支只包含预期文件。测试通过后按团队流程合并或变基。链接工作树不能替代代码审查;提交尚未共享前,一个目录的改动也不会自动出现在另一个目录。
删除前检查有没有未提交改动,再决定提交、暂存还是保留。git worktree remove ../app-auth 会移除干净的链接检出;存在改动时 Git 会拒绝,除非使用强制选项。不要把强制删除当作日常清理。若你从 Git 外部删了目录,可运行 git worktree prune 清理陈旧登记;它不会删除仍有效的工作目录。

6. 何时用工作树,何时开新会话
任务需要不同分支、独立文件快照,或需要保留数小时甚至数天的审查边界时,使用工作树。只读调查或必须查看当前未提交文件的任务,适合在同一检出目录中新开会话。若任务严格串行且只有一个目录要工作,普通分支切换通常更简单。
工作树也增加了分支命名、依赖安装、服务隔离、测试、合并和清理等步骤。如果两个代理必须修改同一批文件,拆成工作树可能让最终合并更难。应先把任务分成互不覆盖的改动,或改为顺序执行。
7. 限制与常见故障排查
如果 git worktree add 提示分支已经被检出,先查看 git worktree list,然后创建新分支或回到已有工作树。如果 OpenCode 显示的文件不符合预期,先确认终端路径和项目根目录。如果命令找不到本地文件,记住忽略和未跟踪文件不属于 Git 检出内容。
如果多个会话的测试互相干扰,要检查 Git 以外的资源:数据库、端口、临时目录、代码生成器和共享缓存都可能冲突。若移除失败,在对应工作树运行 git status,先保存有价值的改动。保留主目录用于集成,并用工作树列表查看所有登记目录。
OpenCode worktree 常见问题
如何在 OpenCode 中使用 Git worktree?
在仓库中运行 git worktree add -b 分支名 ../目录名,进入新目录后启动 opencode。允许写文件前先核对目录和分支。
OpenCode 有内置 worktree 命令吗?
本指南使用 Git 自带的 worktree 命令。OpenCode 可以从新项目目录启动;这里的工作流不需要专用 worktree 参数。
两个 OpenCode 会话能在两个工作树里使用同一分支吗?
Git 通常会阻止一个分支同时在多个链接工作树中检出。独立改动请创建新分支,或回到已存在的工作树。
本地环境文件会复制到新工作树吗?
Git 会检出受跟踪文件。.env 等忽略或未跟踪文件不保证存在;应有意识地设置环境,并避免把密钥提交到 Git。
怎样安全移除 Git worktree?
先检查状态并保存或提交改动,再运行 git worktree remove path。从 Git 外删除目录后,可用 git worktree prune 清除陈旧登记。
官方资料
已于 2026 年 9 月 23 日核对 Git 和 OpenCode 文档。工作树生命周期命令属于 Git 行为;具体选项请按已安装的 Git 版本复核。
相关 OpenCode 指南: OpenCode Agents 与 AGENTS.md · OpenCode JSONC 配置 · OpenCode 权限 · OpenCode 会话存储.
