> ## Documentation Index
> Fetch the complete documentation index at: https://docs.windsurf.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Worktrees de Git

> Configura automáticamente worktrees de Git para tareas paralelas de Cascade

Windsurf es compatible con el uso de worktrees de Git para ejecutar tareas de Cascade en paralelo sin interferir con tu workspace principal.

Cuando usas worktrees, cada conversación de Cascade tiene su propia sesión, lo que permite que Cascade realice modificaciones o compile y pruebe código sin interferir con tu workspace principal.

<div id="basic-worktree-usage">
  ## Uso básico de worktrees
</div>

La forma más sencilla de empezar a usar worktrees es cambiar al modo "Worktree" en la esquina inferior derecha del campo de entrada de Cascade.

<Frame>
  <img style={{ maxHeight: "500px" }} src="https://mintcdn.com/codeium/U6QOrK-OfUtO4wfJ/assets/windsurf/worktree-toggle.png?fit=max&auto=format&n=U6QOrK-OfUtO4wfJ&q=85&s=8bb3e54349d5c84d4db81210a67ee931" width="873" height="224" data-path="assets/windsurf/worktree-toggle.png" />
</Frame>

<Note>
  Actualmente, solo puedes cambiar a un worktree al comienzo de una sesión de Cascade. Las conversaciones no se pueden mover a un worktree diferente una vez iniciadas.
</Note>

Después de que Cascade realice cambios en archivos dentro del worktree, tienes la opción de hacer clic en "merge" para incorporar esos cambios de nuevo en tu workspace principal.

<Frame>
  <img style={{ maxHeight: "500px" }} src="https://mintcdn.com/codeium/U6QOrK-OfUtO4wfJ/assets/windsurf/worktree-merge.png?fit=max&auto=format&n=U6QOrK-OfUtO4wfJ&q=85&s=bb47b232dd861f3e37255b9b82fb18bc" width="724" height="98" data-path="assets/windsurf/worktree-merge.png" />
</Frame>

<div id="location">
  ## Ubicación
</div>

Los worktrees se organizan por nombre de repositorio dentro de `~/.windsurf/worktrees/<repo_name>`.

A cada worktree se le asigna un nombre aleatorio único.

Para ver una lista de worktrees activos, puedes ejecutar `git worktree list` desde el directorio del repositorio.

<Warning>
  Debido a que los worktrees se encuentran en un directorio diferente al de tu proyecto original, **los sistemas de compilación o las herramientas que dependen de rutas relativas** (por ejemplo, referencias a `../shared-lib`, dependencias enlazadas mediante enlaces simbólicos (symlinks) o dependencias de código fuente en un monorepo resueltas por ruta) pueden fallar dentro de un worktree. Si tu proyecto usa rutas relativas fuera de la raíz del repositorio, configura un hook [`post_setup_worktree`](./worktrees#setup-hook) para crear los enlaces simbólicos necesarios o copiar los archivos requeridos en las ubicaciones esperadas.
</Warning>

<div id="setup-hook">
  ## Hook de configuración
</div>

Cada worktree contiene una copia de los archivos de tu repositorio, pero no incluye archivos `.env` u otros paquetes que no estén bajo control de versiones.

Si quieres incluir archivos o paquetes adicionales en cada worktree, puedes usar el [hook `post_setup_worktree`](./hooks#post_setup_worktree) para copiarlos en el directorio del worktree.

El hook `post_setup_worktree` se ejecuta después de que cada worktree se haya creado y configurado. Se ejecuta dentro del nuevo directorio **worktree**.

La variable de entorno `$ROOT_WORKSPACE_PATH` apunta a la ruta del workspace original y se puede usar para acceder a archivos o ejecutar comandos relativos al repositorio original.

<div id="example">
  ### Ejemplo
</div>

Copiar archivos de entorno e instalar dependencias al crear un nuevo worktree.

**Config** (en `.windsurf/hooks.json`):

```json theme={null}
{
  "hooks": {
    "post_setup_worktree": [
      {
        "command": "bash $ROOT_WORKSPACE_PATH/hooks/setup_worktree.sh",
        "show_output": true
      }
    ]
  }
}
```

**Script** (`hooks/setup_worktree.sh`):

```bash theme={null}
#!/bin/bash

# Copiar archivos de entorno desde el workspace original
if [ -f "$ROOT_WORKSPACE_PATH/.env" ]; then
    cp "$ROOT_WORKSPACE_PATH/.env" .env
    echo "Archivo .env copiado"
fi

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

# Instalar dependencias
if [ -f "package.json" ]; then
    npm install
    echo "Dependencias de npm instaladas"
fi

exit 0
```

Este hook garantiza que en cada worktree se instalen automáticamente la configuración de entorno y las dependencias necesarias.

<div id="cleanup">
  ## Limpieza
</div>

Windsurf limpia automáticamente los *worktrees* más antiguos al crear un nuevo *worktree* para evitar un uso excesivo de disco. Cada workspace puede tener hasta **20** *worktrees*.

Los *worktrees* se eliminan en función de la última vez que se accedió a ellos: los más antiguos se eliminan primero. Esta limpieza ocurre por workspace, lo que garantiza que los *worktrees* de diferentes repositorios permanezcan independientes entre sí.

Además, si eliminas manualmente una conversación de Cascade, Windsurf eliminará automáticamente el *worktree* asociado.

<div id="source-control-panel">
  ## Panel de control de código fuente
</div>

De forma predeterminada, Windsurf no muestra los worktrees creados por Cascade en el panel de SCM.
Puedes establecer `git.showWindsurfWorktrees` en `true` en la configuración para anular este comportamiento y permitir visualizar los worktrees en el panel de SCM.
