Windsurf oferă suport pentru folosirea worktree-urilor Git, pentru a rula taskuri Cascade în paralel, fără a interfera cu workspace-ul principal.
Când folosiți worktree-uri, fiecare conversație Cascade primește propria sesiune, permițându-i lui Cascade să facă modificări sau să construiască și să testeze codul, fără a interfera cu workspace-ul principal.
Utilizarea de bază a worktree-urilor
Cel mai simplu mod de a începe să utilizați worktree-uri este să comutați la modul „Worktree” din colțul din dreapta jos al câmpului de introducere Cascade.
În prezent, puteți comuta la un worktree doar la începutul unei sesiuni Cascade. Conversațiile nu pot fi mutate într-un alt worktree după ce au început.
După ce Cascade face modificări de fișiere în worktree, aveți opțiunea de a da clic pe „merge” pentru a integra acele modificări înapoi în workspace-ul principal.
Worktree-urile sunt organizate după numele repo-ului în ~/.windsurf/worktrees/<repo_name>.
Fiecărui worktree i se atribuie un nume unic, generat aleatoriu.
Pentru a vedea o listă a worktree-urilor active, puteți rula git worktree list din directorul repo-ului.
Deoarece worktree-urile se află într-un director diferit față de proiectul dumneavoastră original, sistemele de build sau uneltele care se bazează pe căi relative (de ex., referințe de tip ../shared-lib, dependențe legate prin symlink-uri sau dependențe de sursă dintr-un monorepo rezolvate pe baza căii) pot să nu mai funcționeze corect într-un worktree. Dacă proiectul dumneavoastră folosește căi relative în afara rădăcinii repository-ului, configurați un hook post_setup_worktree pentru a crea symlink-urile necesare sau pentru a copia fișierele necesare în locațiile așteptate.
Fiecare worktree conține o copie a fișierelor din repository, dar nu include fișiere .env sau alte pachete care nu sunt controlate prin versionare.
Dacă doriți să includeți fișiere sau pachete suplimentare în fiecare worktree, puteți folosi hook-ul post_setup_worktree hook pentru a le copia în directorul worktree-ului.
Hook-ul post_setup_worktree rulează după ce fiecare worktree este creat și configurat. Este executat în interiorul noului director worktree.
Variabila de mediu $ROOT_WORKSPACE_PATH indică calea originală a workspace-ului și poate fi folosită pentru a accesa fișiere sau pentru a rula comenzi relativ la repository-ul original.
Copiați fișierele de mediu și instalați dependențele la crearea unui nou worktree.
Config (în .windsurf/hooks.json):
{
"hooks": {
"post_setup_worktree": [
{
"command": "bash $ROOT_WORKSPACE_PATH/hooks/setup_worktree.sh",
"show_output": true
}
]
}
}
Script (hooks/setup_worktree.sh):
#!/bin/bash
# Copiați fișierele de mediu din workspace-ul original
if [ -f "$ROOT_WORKSPACE_PATH/.env" ]; then
cp "$ROOT_WORKSPACE_PATH/.env" .env
echo "Fișierul .env a fost copiat"
fi
if [ -f "$ROOT_WORKSPACE_PATH/.env.local" ]; then
cp "$ROOT_WORKSPACE_PATH/.env.local" .env.local
echo "Fișierul .env.local a fost copiat"
fi
# Instalați dependențele
if [ -f "package.json" ]; then
npm install
echo "Dependențele npm au fost instalate"
fi
exit 0
Acest hook se asigură că fiecare worktree are în mod automat configurată configurația de mediu necesară și dependențele instalate.
Windsurf curăță automat worktree-urile mai vechi atunci când creează un nou worktree, pentru a preveni utilizarea excesivă a spațiului pe disc. Fiecare workspace poate avea cel mult 20 de worktree-uri.
Worktree-urile sunt curățate în funcție de momentul în care au fost accesate ultima dată — cele mai vechi sunt eliminate primele. Această curățare are loc la nivel de workspace, asigurând că worktree-urile din diferite repository-uri rămân independente unele de altele.
În plus, dacă ștergeți manual o conversație Cascade, Windsurf va șterge automat worktree-ul asociat.
În mod implicit, Windsurf nu afișează worktree-urile create de Cascade în panoul SCM.
Puteți seta git.showWindsurfWorktrees la true în setările dvs. pentru a modifica acest comportament și a afișa worktree-urile în panoul SCM.