Español

Árboles de trabajo

Árboles de trabajo

Usa árboles de trabajo de Git en Codex desde la aplicación de escritorio ChatGPT para ejecutar chats en paralelo

Los árboles de trabajo permiten que Codex ejecute varios chats independientes en el mismo proyecto sin que interfieran entre sí. El repositorio, el árbol de trabajo y los comandos permanecen en el equipo o el entorno de desarrollo remoto que contiene el proyecto. Puedes trabajar directamente en la aplicación de escritorio ChatGPT o usar Remoto en la aplicación móvil ChatGPT para iniciar, guiar, aprobar y revisar chats de árboles de trabajo en un equipo conectado.

En los repositorios Git, las tareas programadas pueden ejecutarse en árboles de trabajo dedicados en segundo plano para que no entren en conflicto con tu trabajo en curso. En proyectos sin control de versiones, las tareas programadas se ejecutan directamente en el directorio del proyecto. También puedes iniciar chats manualmente en un árbol de trabajo y usar Handoff para trasladar un chat entre Local y Worktree.

Qué es un árbol de trabajo

Los árboles de trabajo solo funcionan en proyectos que forman parte de un repositorio Git, ya que utilizan árboles de trabajo de Git de forma interna. Un árbol de trabajo permite crear una segunda copia ("checkout") del repositorio. Cada árbol de trabajo tiene su propia copia de todos los archivos del repositorio, pero todos comparten los mismos metadatos (carpeta .git) sobre confirmaciones, ramas, etc. Esto permite extraer y usar varias ramas en paralelo.

Terminología

  • Checkout local: el repositorio que creaste. A veces se denomina simplemente Local en la aplicación de escritorio ChatGPT.
  • Worktree: un árbol de trabajo de Git creado a partir de tu checkout local en la aplicación de escritorio ChatGPT.
  • Handoff: el flujo que mueve un chat entre Local y Worktree. Codex se encarga de las operaciones de Git necesarias para mover tu trabajo entre ambos de forma segura.

Por qué usar un árbol de trabajo

  1. Trabaja en paralelo con Codex sin alterar tu configuración Local actual.
  2. Pon trabajo en cola para que se ejecute en segundo plano mientras mantienes la atención en primer plano.
  3. Mueve un chat a Local más adelante, cuando quieras inspeccionarlo, probarlo o colaborar de forma más directa.

Primeros pasos

Los árboles de trabajo requieren un repositorio Git. Asegúrate de que el proyecto seleccionado se encuentre en uno.

  1. Selecciona "Worktree"

    En la vista de chat nuevo, selecciona Worktree bajo el cuadro de redacción. Si lo deseas, elige un entorno local para ejecutar scripts de configuración del árbol de trabajo.

  2. Selecciona la rama inicial

    Bajo el cuadro de redacción, elige la rama de Git en la que se basará el árbol de trabajo. Puede ser tu rama main / master, una rama de funcionalidad o tu rama actual con cambios locales sin preparar.

  3. Envía tu instrucción

    Envía tu instrucción y Codex creará un árbol de trabajo de Git basado en la rama seleccionada. De forma predeterminada, Codex trabaja en un "HEAD separado".

  4. Elige dónde seguir trabajando

    Cuando quieras, puedes seguir trabajando directamente en el árbol de trabajo o transferir el chat a tu checkout local. La transferencia hacia o desde Local mueve tanto el chat como el código para que puedas continuar en el otro checkout.

Trabajar entre Local y Worktree

Los árboles de trabajo tienen un aspecto y funcionamiento muy similares a los de tu checkout local. La diferencia radica en el lugar que ocupan en tu flujo. Puedes considerar Local como el primer plano y Worktree como el segundo plano. Handoff permite mover un chat entre ambos.

De forma interna, Handoff gestiona las operaciones de Git necesarias para mover trabajo entre dos checkouts de forma segura. Esto es importante porque Git solo permite que una rama esté extraída en un lugar a la vez. Si extraes una rama en un árbol de trabajo, no puedes extraerla simultáneamente en tu checkout local, y viceversa.

En la práctica, hay dos rutas habituales:

  1. Trabajar exclusivamente en el árbol de trabajo. Esta ruta funciona mejor cuando puedes verificar los cambios directamente en el árbol de trabajo, por ejemplo, porque tienes las dependencias y herramientas instaladas mediante un script de configuración del entorno local.
  2. Transferir el chat a Local. Usa esta opción cuando quieras llevar el chat al primer plano, por ejemplo, para inspeccionar los cambios en tu IDE habitual o porque solo puedes ejecutar una instancia de tu aplicación.

Opción 1: Trabajar en el árbol de trabajo

Si quieres mantenerte exclusivamente en el árbol de trabajo con tus cambios, convierte el árbol de trabajo en una rama mediante el botón Crear rama aquí del encabezado del chat.

A partir de aquí, puedes confirmar los cambios, enviar la rama al repositorio remoto y abrir una solicitud de incorporación de cambios en GitHub.

Puedes abrir tu IDE en el árbol de trabajo con el botón Abrir del encabezado, usar el terminal integrado o cualquier otra herramienta que necesites desde el directorio del árbol de trabajo.

Vista del chat del árbol de trabajo con controles de la rama y detalles del árbol de trabajo (modo claro)
Recuerda que, si creas una rama en un árbol de trabajo, no puedes cambiar a ella en ningún otro árbol de trabajo, incluida tu copia de trabajo local.

Opción 2: Transferir un chat a Local

Si quieres llevar un chat al primer plano, selecciona Transferir en el encabezado del chat y muévelo a Local.

Esta ruta funciona bien cuando quieres leer los cambios en la ventana habitual de tu IDE, ejecutar tu servidor de desarrollo existente o validar el trabajo en el mismo entorno que ya utilizas a diario.

Codex se encarga de los pasos de Git necesarios para mover el chat de forma segura entre el árbol de trabajo y tu checkout local.

Cada chat conserva el mismo árbol de trabajo asociado a lo largo del tiempo. Si más adelante devuelves el chat a un árbol de trabajo, Codex lo devuelve al mismo entorno en segundo plano para que puedas continuar donde lo dejaste.

Cuadro de diálogo de transferencia para mover un chat de un árbol de trabajo a Local (modo claro)
También puedes hacerlo en la dirección contraria. Si ya estás trabajando en Local y quieres liberar el primer plano, usa **Transferir** para mover el chat a un árbol de trabajo. Esto resulta útil cuando quieres que Codex siga trabajando en segundo plano mientras vuelves a centrar tu atención en otra tarea local.

Como Handoff utiliza operaciones de Git, los archivos que formen parte de tu archivo .gitignore no se moverán con el chat, a menos que Codex los copie en un árbol de trabajo local administrado mediante .worktreeinclude.

Detalles avanzados

Árboles de trabajo administrados por Codex y permanentes

De forma predeterminada, los chats utilizan un árbol de trabajo administrado por Codex. Estos árboles están diseñados para ser ligeros y desechables. Normalmente, un árbol de trabajo administrado por Codex se dedica a un chat, y Codex devuelve ese chat al mismo árbol de trabajo si lo transfieres de nuevo allí más adelante.

Si quieres un entorno de larga duración, crea un árbol de trabajo permanente desde el menú de tres puntos de un proyecto en la barra lateral. Esto crea un nuevo árbol de trabajo permanente como proyecto independiente. Los árboles de trabajo permanentes no se eliminan automáticamente y puedes iniciar varios chats desde el mismo árbol de trabajo.

Cómo administra Codex los árboles de trabajo por ti

Codex crea los árboles de trabajo en $CODEX_HOME/worktrees. La confirmación inicial es la confirmación HEAD de la rama seleccionada al iniciar el chat. Si elegiste una rama con cambios locales, Codex también aplica los cambios sin confirmar al árbol de trabajo. El árbol de trabajo no se encuentra en una rama. Está en un estado de HEAD separado. Esto permite que Codex cree varios árboles de trabajo sin llenar tus ramas de elementos innecesarios.

Copiar archivos locales ignorados en árboles de trabajo administrados

Los árboles de trabajo locales administrados por Codex comienzan a partir de un checkout de Git, por lo que los archivos con seguimiento ya están presentes. Si tu repositorio ignora archivos de configuración local que necesita un árbol de trabajo nuevo, añade un archivo .worktreeinclude a la raíz del repositorio y enumera las rutas ignoradas o los patrones de estilo .gitignore que se deben copiar cuando Codex cree un árbol de trabajo administrado.

Usa esta opción para archivos que Git ignora intencionadamente, como .env, .env.local o config/secrets.json. Codex solo copia los archivos ignorados que coincidan con .worktreeinclude; no copia otros archivos locales de los que Git no realiza seguimiento. No enumeres archivos con seguimiento.

Codex copia automáticamente un archivo AGENTS.override.md ignorado en los árboles de trabajo locales administrados, por lo que no necesitas incluirlo en .worktreeinclude.

# .worktreeinclude
.env
.env.local
config/secrets.json

Codex omite los enlaces simbólicos de origen y no sobrescribe los archivos que ya existan en el nuevo checkout. Este comportamiento se aplica a los árboles de trabajo locales administrados por la aplicación de escritorio ChatGPT, no a los árboles de trabajo remotos ni a los árboles de trabajo de Git que crees por tu cuenta desde la línea de comandos.

Limitaciones de las ramas

Supongamos que Codex termina un trabajo en un árbol de trabajo y decides crear en él una rama feature/a mediante Crear rama aquí. Ahora quieres probarla en tu checkout local. Si intentaras extraer la rama, obtendrías el siguiente error:

fatal: 'feature/a' is already used by worktree at '<WORKTREE_PATH>'

Para resolverlo, tendrías que extraer otra rama distinta de feature/a en el árbol de trabajo.

Si tienes previsto extraer la rama localmente, usa Handoff para mover el chat a Local en lugar de intentar mantener la misma rama extraída en dos lugares a la vez.

Por qué existe esta limitación Git impide que la misma rama esté activa en más de un árbol de trabajo a la vez porque una rama representa una única referencia mutable (`refs/heads/`), cuyo significado es «el estado activo actual» de un árbol de trabajo.

Cuando se extrae una rama, Git considera que su HEAD pertenece a ese árbol de trabajo y espera que operaciones como las confirmaciones, los restablecimientos, los rebases y las fusiones hagan avanzar esa referencia de forma bien definida y secuencial. Permitir que varios árboles de trabajo extraigan simultáneamente la misma rama generaría ambigüedad y condiciones de carrera respecto a qué operaciones de cada árbol de trabajo actualizan la referencia de la rama, lo que podría provocar confirmaciones perdidas, índices incoherentes o una resolución de conflictos poco clara.

Al imponer la regla de una rama por árbol de trabajo, Git garantiza que cada rama tenga una única copia de trabajo autorizada, al tiempo que permite que otros árboles de trabajo hagan referencia de forma segura a las mismas confirmaciones mediante HEAD separados o ramas distintas.

Limpieza de árboles de trabajo

Los árboles de trabajo pueden ocupar mucho espacio en disco. Cada uno tiene su propio conjunto de archivos del repositorio, dependencias, cachés de compilación, etc. Por ello, la aplicación de escritorio ChatGPT intenta mantener la cantidad de árboles de trabajo dentro de un límite razonable.

De forma predeterminada, Codex conserva tus 15 árboles de trabajo administrados por Codex más recientes. Puedes cambiar este límite o desactivar la eliminación automática en la configuración si prefieres gestionar el uso del disco por tu cuenta.

Codex intenta evitar la eliminación de árboles de trabajo que aún sean importantes. Los árboles de trabajo administrados por Codex no se eliminarán automáticamente si:

  • Hay un chat fijado asociado a él
  • El chat sigue en curso
  • El árbol de trabajo es permanente

Los árboles de trabajo administrados por Codex se eliminan automáticamente cuando:

  • Archivas el chat asociado
  • Codex necesita eliminar árboles de trabajo antiguos para mantenerse dentro del límite configurado

Antes de eliminar un árbol de trabajo administrado por Codex, Codex guarda una instantánea del trabajo que contiene. Si abres un chat después de que se haya eliminado su árbol de trabajo, verás la opción de restaurarlo.

Preguntas frecuentes

¿Puedo controlar dónde se crean los árboles de trabajo? Sí. De forma predeterminada, Codex crea los árboles de trabajo administrados en `$CODEX_HOME/worktrees`. Para elegir otra ubicación, abre **Configuración > Árboles de trabajo** y cambia **Raíz de los árboles de trabajo**.

¿Puedo mover un chat entre Local y Worktree? Sí. Usa **Transferir** en el encabezado del chat para moverlo entre tu copia de trabajo local y un árbol de trabajo. Codex se encarga de las operaciones de Git necesarias para mover el chat de forma segura entre entornos. Si más adelante devuelves un chat a un árbol de trabajo, Codex lo devuelve al mismo árbol de trabajo asociado.

¿Qué ocurre con los chats si se elimina un árbol de trabajo? Los chats pueden permanecer en tu historial aunque se elimine el directorio del árbol de trabajo subyacente. En el caso de los árboles de trabajo administrados por Codex, Codex guarda una instantánea antes de eliminar el árbol de trabajo y ofrece restaurarla si vuelves a abrir el chat asociado. Los árboles de trabajo permanentes no se eliminan automáticamente cuando archivas sus chats.