跳转到主要内容
Devin Desktop 支持使用 git worktrees,在不干扰主工作区的情况下并行运行 Cascade 任务。 使用 worktrees 时,每个 Cascade 对话都会获得独立的 会话,使 Cascade 能够进行编辑、构建和测试代码,而不会影响你的主工作区。

基本 worktree 用法

开始使用 worktree 最简单的方式,是在 Cascade 输入框右下角切换到“Worktree”模式。
目前,你只能在 Cascade 会话开始时切换到 worktree。一旦开始对话,就无法再切换到其他 worktree。
当 Cascade 在 worktree 中修改文件后,你可以点击“merge”,将这些更改合并回主工作区。

位置

worktree 会按代码仓库名称组织在 ~/.windsurf/worktrees/<repo_name> 下。 每个 worktree 都会分配一个唯一的随机名称。 要查看活动 worktree 列表,你可以在代码仓库目录中运行 git worktree list
由于 worktree 位于与你原始项目不同的目录中,依赖相对路径的构建系统或工具 (例如 ../shared-lib 引用、符号链接的依赖,或通过路径解析的 monorepo 源码依赖) 在 worktree 中可能无法正常工作。如果你的项目使用了代码仓库根目录之外的相对路径,请配置一个 post_setup_worktree 钩子,创建必要的符号链接,或将所需文件复制到预期位置。

设置钩子

每个 worktree 都包含你的代码仓库文件副本,但不包含 .env 文件或其他未纳入版本控制的软件包。 如果你希望每个 worktree 都包含额外的文件或软件包,可以使用 post_setup_worktree 钩子 将它们复制到 worktree 目录中。 post_setup_worktree 钩子会在每个 worktree 创建并配置完成后运行。它会在新的 worktree 目录中执行。 $ROOT_WORKSPACE_PATH 环境变量指向原始工作区路径,可用于访问文件,或基于原始代码仓库运行命令。

示例

在创建新的 worktree 时,复制环境文件并安装依赖。 配置 (位于 .windsurf/hooks.json) :
{
  "hooks": {
    "post_setup_worktree": [
      {
        "command": "bash $ROOT_WORKSPACE_PATH/hooks/setup_worktree.sh",
        "show_output": true
      }
    ]
  }
}
脚本 (hooks/setup_worktree.sh):
#!/bin/bash

# 从原始工作区复制环境文件
if [ -f "$ROOT_WORKSPACE_PATH/.env" ]; then
    cp "$ROOT_WORKSPACE_PATH/.env" .env
    echo "Copied .env file"
fi

if [ -f "$ROOT_WORKSPACE_PATH/.env.local" ]; then
    cp "$ROOT_WORKSPACE_PATH/.env.local" .env.local
    echo "Copied .env.local file"
fi

# 安装依赖
if [ -f "package.json" ]; then
    npm install
    echo "Installed npm dependencies"
fi

exit 0
此钩子可确保每个工作树都会自动完成所需的环境配置并安装依赖。

清理

Devin Desktop 在创建新的 worktree 时,会自动清理较旧的 worktree,以避免磁盘占用过高。每个工作区最多可有 20 个 worktree。 系统会根据 worktree 的最后访问时间进行清理——最旧的会先被移除。清理是按工作区分别进行的,以确保不同代码仓库中的 worktree 彼此独立。 此外,如果你手动删除某个 Cascade 对话,Devin Desktop 也会自动删除关联的 worktree。

源代码管理面板

默认情况下,Devin Desktop 不会在 SCM 面板中显示由 Cascade 创建的 worktrees。 你可以在设置中将 git.showWindsurfWorktrees 设为 true,以覆盖这一默认行为,并在 SCM 面板中显示这些 worktrees。