Skip to content

Worktree ​

Worktree 让一个会话在自己的分支上拥有一份独立的仓库副本。Agent 在里面改代码、构建、跑测试,你的本地工作区保持原样,你可以继续手头的工作,也可以同时开多个会话并行推进。

Worktree 需要工作区是 Git 仓库,并且和 Desktop 在同一台机器上。

在 worktree 中开始会话 ​

新建会话时,在输入框下方选择 新 worktree,而不是 本地工作。分支控件选择 worktree 从哪个分支开始。发送第一条消息时,DotCraft 会为这个 worktree 新建一个分支。

如果想从已有会话分出去,在会话标题栏或侧边栏的会话菜单中选择 Fork 到新 worktree。

在本地和 worktree 之间移动会话 ​

在空闲会话的输入框下方打开位置控件:

  • 移交到 worktree 把会话移到一个新的 worktree,也可以移到一个没有其他会话在用的现有 worktree,它的分支保持不变。未提交的改动会一起带过去,之后你的本地工作区是干净的。分支名留空时,DotCraft 会自动命名。
  • 移交到分支 把会话移回本地。本地工作区会切换到 worktree 的分支,应用 worktree 中未提交的改动,然后删除这个 worktree。本地工作区需要先保持干净:如果有未提交的改动,对话框会列出这些文件,在你提交或暂存之前不会移动任何内容。

对话框会逐步显示每个步骤的进度。只有会话空闲、并且没有排队中的消息时才能移交。

你也可以直接让 Agent 在 worktree 中工作,例如"在 worktree 里做这件事"。它会自己进入 worktree,在同一轮里继续工作,并在你要求时回到本地,它不会自行把改动带回本地工作区。

带上被忽略的文件 ​

新 worktree 只包含 Git 跟踪的文件。要复制 .env 这类被 Git 忽略的文件,在仓库根目录的 .worktreeinclude 文件中列出它们,写法和 .gitignore 相同:

text
.env
config/local.json

清理 ​

归档会话时,如果 worktree 中没有未提交的改动,就会删除这个 worktree,分支保留,取消归档时会重新检出。删除会话同样会删除干净的 worktree,分支没有新提交时一并删除。有未提交改动的 worktree 始终保留在磁盘上。

设置 › 源代码控制 › Worktree 列出工作区的所有 worktree,可以删除不再需要的。这里也可以设置 DotCraft 为新 worktree 命名分支时使用的前缀(默认 dotcraft)。