Devin Desktop 支持使用 git worktrees,在不干扰主工作区的情况下并行运行 Cascade 任务。
使用 worktrees 时,每个 Cascade 对话都会获得独立的 会话,使 Cascade 能够进行编辑、构建和测试代码,而不会影响你的主工作区。
开始使用 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。