Skip to content
← Back to the glossary

Concept · 1 min read

Worktrees

Several working directories from one repository, so parallel jobs never fight over the same checkout.

Spanish only for now · Solo en español por ahora

Qué es

Un worktree es una segunda (o tercera) carpeta de trabajo del mismo repositorio, con su propia rama activa. Todas comparten un único .git: no se copia el historial. git worktree add <carpeta> -b <rama> crea la carpeta y la rama de una vez.

Por qué importa aquí

Cada tarea del enjambre se ejecuta en su propio worktree y su propia rama (mac/<id>). Dos trabajos, o un trabajo y tú, nunca escriben el mismo archivo, y el resultado es revisable y desechable: si la rama no sirve, se descarta. Con un solo checkout, un agente a medias dejaría tu árbol de trabajo sucio. Las decisiones están en ../tutorial/08-primera-tarea-distribuida.md y la razón en worker.sh.

El worker además se niega a reutilizar un id: si el worktree ya existe, termina con error en vez de pisarlo.

Ejemplo real

De worker.sh:

git worktree add -q "$wt" -b "$branch" HEAD

Y cuando ya existe:

{"task_id":"<id>","exit":2,"error":"worktree exists: refuse to reuse a task id"}

Resultado en el ledger: branch: mac/changelog-stub, con el commit y su result.json.

Error típico

Intentar tener la misma rama en dos worktrees: git lo rechaza (una rama solo puede estar activa en un worktree). Otro: olvidar limpiar. Los worktrees viejos se acumulan; git worktree list los muestra y git worktree remove los quita. En este proyecto no se ha automatizado esa limpieza (no hay evidencia en las fuentes de que exista).

Para saber más

Appears in