Windsurf は git worktree を使用して、メインのワークスペースに影響を与えることなく Cascade タスクを並列で実行できます。
ワークツリーを使用すると、各 Cascade での会話ごとに独立したセッションが割り当てられ、Cascade がメインのワークスペースに干渉することなく、コードの編集やビルド、テストを行えるようになります。
worktree を使い始める最も簡単な方法は、Cascade の入力欄右下にある「Worktree」モードに切り替えることです。
現在のところ、Cascade セッションの開始時にのみ worktree を切り替えることができます。会話は開始後に別の worktree に移動することはできません。
Cascade が worktree 内のファイルに変更を加えた後、「merge」をクリックして、その変更をメインのワークスペースに取り込むことができます。
ワークツリーは、~/.windsurf/worktrees/<repo_name> 内でリポジトリ名ごとに配置されます。
各ワークツリーには、一意のランダムな名前が付与されます。
アクティブなワークツリーの一覧を表示するには、リポジトリのディレクトリ内で git worktree list を実行します。
ワークツリーは元のプロジェクトとは異なるディレクトリに存在するため、相対パスに依存するビルドシステムやツール(例:../shared-lib 参照、シンボリックリンクされた依存関係、パス指定で解決しているモノレポ内ソース依存関係など)は、ワークツリー内では動作しなくなる可能性があります。プロジェクトでリポジトリルートの外側への相対パスを使用している場合は、必要なシンボリックリンクを作成するか、期待される場所に必要なファイルをコピーするように post_setup_worktree hook を設定してください。
各 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 ".envファイルをコピーしました"
fi
if [ -f "$ROOT_WORKSPACE_PATH/.env.local" ]; then
cp "$ROOT_WORKSPACE_PATH/.env.local" .env.local
echo ".env.localファイルをコピーしました"
fi
# 依存関係をインストール
if [ -f "package.json" ]; then
npm install
echo "npm依存関係をインストールしました"
fi
exit 0
このフックにより、各ワークツリーで必要な環境構成と依存関係が自動的にセットアップされます。
Windsurf は、新しい worktree を作成する際に、古い worktree を自動的にクリーンアップして、ディスク使用量が増えすぎないようにします。各ワークスペースには最大 20 個まで worktree を作成できます。
worktree は最後にアクセスされた時刻に基づいてクリーンアップされ、最も古いものから順に削除されます。このクリーンアップはワークスペース単位で行われるため、異なるリポジトリの worktree が互いに影響しないようになっています。
さらに、Cascade の会話を手動で削除した場合、Windsurf は関連付けられた worktree を自動的に削除します。
デフォルトでは、Windsurf は SCM パネルに Cascade によって作成されたワークツリーを表示しません。
設定で git.showWindsurfWorktrees を true に変更すると、この挙動を変更して、SCM パネルにワークツリーを表示できるようになります。