For the complete documentation index, see llms.txt. Markdown versions of documentation pages are available by appending .md to the page URL.
기본 탐색

작업 트리

Codex에서 Git 작업 트리를 사용해 채팅을 병렬로 실행하세요

작업 트리를 사용하면 Codex가 같은 프로젝트에서 여러 독립적인 채팅을 서로 방해하지 않고 실행할 수 있습니다. 레포지토리, 작업 트리, 명령어는 프로젝트가 있는 컴퓨터나 원격 개발 환경에 그대로 유지됩니다. ChatGPT 데스크톱 앱에서 직접 작업하거나 ChatGPT 모바일 앱의 원격 기능을 사용해 연결된 컴퓨터의 작업 트리 채팅을 시작하고, 작업을 안내하고, 승인하고, 검토할 수 있습니다.

Git 레포지토리에서는 예약 작업이 전용 백그라운드 작업 트리에서 실행될 수 있어 진행 중인 작업과 충돌하지 않습니다. 버전 관리되지 않는 프로젝트에서는 예약 작업이 프로젝트 디렉터리에서 직접 실행됩니다. 작업 트리에서 채팅을 직접 시작하고 전환 기능을 사용해 로컬과 작업 트리 사이에서 채팅을 이동할 수도 있습니다.

작업 트리는 휴대전화에서 로컬로 실행되지 않습니다. 원격 기능을 사용하면 모바일 앱에서 레포지토리와 작업 트리가 있는 연결된 컴퓨터나 그 컴퓨터가 사용하는 원격 개발 환경의 Codex를 제어할 수 있습니다. 아래의 데스크톱 전용 안내는 연결된 컴퓨터에 적용됩니다.

작업 트리란?

작업 트리는 내부적으로 Git 작업 트리를 사용하므로 Git 레포지토리에 속한 프로젝트에서만 작동합니다. 작업 트리를 사용하면 레포지토리의 두 번째 사본인 “체크아웃”을 만들 수 있습니다. 각 작업 트리에는 레포지토리의 모든 파일 사본이 있지만 커밋, 브랜치 등에 관한 메타데이터(.git 폴더)는 모두 공유합니다. 따라서 여러 브랜치를 체크아웃해 병렬로 작업할 수 있습니다.

용어

  • 로컬 체크아웃: 직접 만든 레포지토리입니다. ChatGPT 데스크톱 앱에서는 로컬이라고 줄여 부르기도 합니다.
  • 작업 트리: ChatGPT 데스크톱 앱에서 로컬 체크아웃을 기반으로 생성된 Git 작업 트리입니다.
  • 전환: 채팅을 로컬과 작업 트리 사이에서 옮기는 플로우입니다. 작업을 안전하게 옮기는 데 필요한 Git 작업은 Codex가 처리합니다.

작업 트리를 사용하는 이유

  1. 현재 로컬 설정에 영향을 주지 않고 Codex와 병렬로 작업하세요.
  2. 포그라운드 작업에 집중하면서 백그라운드 작업을 대기열에 추가하세요.
  3. 나중에 변경 사항을 검토하거나 테스트하거나 더 직접적으로 협업할 준비가 되면 채팅을 로컬로 옮기세요.

시작하기

작업 트리를 사용하려면 Git 레포지토리가 필요합니다. 선택한 프로젝트가 Git 레포지토리에 속해 있는지 확인하세요.

  1. “작업 트리” 선택

    새 채팅 화면에서 Composer 아래의 작업 트리를 선택하세요. 필요하면 작업 트리 설정 스크립트를 실행할 로컬 환경을 선택하세요.

  2. 시작 브랜치 선택

    Composer 아래에서 작업 트리의 기반으로 사용할 Git 브랜치를 선택하세요. main / master 브랜치, 기능 브랜치 또는 스테이징하지 않은 로컬 변경 사항이 있는 현재 브랜치를 사용할 수 있습니다.

  3. 프롬프트 제출

    프롬프트를 제출하면 Codex가 선택한 브랜치를 기반으로 Git 작업 트리를 만듭니다. 기본적으로 Codex는 “분리된 HEAD” 상태에서 작업합니다.

  4. 계속 작업할 위치 선택

    준비가 되면 작업 트리에서 직접 계속 작업하거나 채팅을 로컬 체크아웃으로 전환할 수 있습니다. 로컬과 작업 트리 사이에서 전환하면 채팅과 코드가 모두 이동하므로 다른 체크아웃에서 작업을 이어갈 수 있습니다.

로컬과 작업 트리 간 작업

작업 트리는 로컬 체크아웃과 모양이나 사용 방식이 거의 같습니다. 플로우에서의 역할만 다릅니다. 로컬은 포그라운드, 작업 트리는 백그라운드라고 생각하면 됩니다. 전환 기능을 사용하면 둘 사이에서 채팅을 옮길 수 있습니다.

내부적으로 전환 기능은 두 체크아웃 사이에서 작업을 안전하게 옮기는 데 필요한 Git 작업을 처리합니다. 이는 Git에서는 브랜치 하나를 한 번에 한 위치에서만 체크아웃할 수 있기 때문입니다. 작업 트리에서 브랜치를 체크아웃하면 로컬 체크아웃에서 동시에 체크아웃할 수 없습니다 . 반대의 경우도 마찬가지입니다.

실제로는 주로 다음 두 가지 방법을 사용합니다:

  1. 작업 트리에서만 작업하기. 로컬 환경 설정 스크립트를 사용해 종속성과 도구를 설치한 경우처럼 작업 트리에서 변경 사항을 직접 검증할 수 있을 때 가장 적합합니다.
  2. 채팅을 로컬로 전환하기. 평소 사용하는 IDE에서 변경 사항을 검토하거나 앱 인스턴스를 하나만 실행할 수 있는 경우처럼 채팅을 포그라운드로 가져오고 싶을 때 사용하세요.

옵션 1: 작업 트리에서 작업하기

변경 사항을 작업 트리에 둔 채로 계속 작업하려면 채팅 헤더의 여기에서 브랜치 만들기 버튼을 사용해 작업 트리를 브랜치로 전환하세요.

이제 변경 사항을 커밋하고 브랜치를 원격 레포지토리에 푸시한 뒤 GitHub에서 Pull Request를 열 수 있습니다.

헤더의 “열기” 버튼으로 작업 트리를 IDE에서 열거나 통합 터미널을 사용하는 등 작업 트리 디렉터리에서 필요한 모든 작업을 수행할 수 있습니다.

작업 트리에서 브랜치를 만들면 로컬 체크아웃을 포함한 다른 작업 트리에서는 해당 브랜치를 체크아웃할 수 없다는 점을 기억하세요.

옵션 2: 채팅을 로컬로 전환하기

채팅을 포그라운드로 가져오려면 채팅 헤더에서 전환을 선택하고 로컬로 옮기세요.

평소 사용하는 IDE 창에서 변경 사항을 확인하거나 기존 개발 서버를 실행하거나 일상적으로 사용하는 환경에서 작업을 검증하려는 경우에 적합합니다.

Codex는 작업 트리와 로컬 체크아웃 사이에서 채팅을 안전하게 옮기는 데 필요한 Git 단계를 처리합니다.

각 채팅은 시간이 지나도 동일한 작업 트리에 연결된 상태로 유지됩니다. 나중에 채팅을 작업 트리로 다시 전환하면 Codex가 동일한 백그라운드 환경으로 돌려보내므로 중단한 지점부터 작업을 이어갈 수 있습니다.

반대 방향으로도 전환할 수 있습니다. 이미 로컬에서 작업 중이고 포그라운드를 비우려면 전환 기능을 사용해 채팅을 작업 트리로 옮기세요. 로컬에서 다른 작업에 다시 집중하는 동안 Codex가 백그라운드에서 계속 작업하도록 하고 싶을 때 유용합니다.

전환에는 Git 작업이 사용되므로 .gitignore 파일에 지정된 파일은 Codex가 .worktreeinclude를 사용해 로컬 관리형 작업 트리로 복사하지 않는 한 채팅과 함께 이동하지 않습니다.

고급 세부 정보

Codex 관리형 작업 트리와 영구 작업 트리

기본적으로 채팅은 Codex 관리형 작업 트리를 사용합니다. 이러한 작업 트리는 가볍게 사용한 뒤 폐기할 수 있도록 설계되었습니다. 일반적으로 Codex 관리형 작업 트리 하나는 채팅 하나에 전용으로 사용되며, 나중에 해당 채팅을 작업 트리로 다시 전환하면 Codex가 같은 작업 트리로 돌려보냅니다.

오래 유지할 환경이 필요하다면 사이드바에서 프로젝트의 점 3개 메뉴를 열어 영구 작업 트리를 만드세요. 그러면 영구 작업 트리가 독립된 프로젝트로 새로 생성됩니다. 영구 작업 트리는 자동으로 삭제되지 않으며 하나의 작업 트리에서 여러 채팅을 시작할 수 있습니다.

Codex가 작업 트리를 관리하는 방식

Codex는 $CODEX_HOME/worktrees에 작업 트리를 만듭니다. 시작 커밋은 채팅을 시작할 때 선택한 브랜치의 HEAD 커밋입니다. 로컬 변경 사항이 있는 브랜치를 선택하면 Codex가 커밋되지 않은 변경 사항도 작업 트리에 적용합니다. 작업 트리는 브랜치로 체크아웃되지 않고 분리된 HEAD 상태가 됩니다. 따라서 Codex는 브랜치를 불필요하게 늘리지 않고 여러 작업 트리를 만들 수 있습니다.

무시된 로컬 파일을 관리형 작업 트리에 복사

로컬 Codex 관리형 작업 트리는 Git 체크아웃에서 시작하므로 추적되는 파일은 이미 포함되어 있습니다. 새 작업 트리에 필요한 로컬 설정 파일을 레포지토리가 무시하는 경우 레포지토리 루트에 .worktreeinclude 파일을 추가하고, Codex가 관리형 작업 트리를 만들 때 복사할 무시된 경로나 .gitignore 형식의 패턴을 나열하세요.

Git에서 의도적으로 무시하는 .env, .env.local, config/secrets.json 같은 파일에 사용하세요. Codex는 .worktreeinclude에 지정된 패턴과 일치하는 무시된 파일만 복사하며 Git이 추적하지 않는 다른 로컬 파일은 복사하지 않습니다. 추적되는 파일은 나열하지 마세요.

Codex는 무시된 AGENTS.override.md 파일을 로컬 관리형 작업 트리에 자동으로 복사하므로 .worktreeinclude에 나열할 필요가 없습니다.

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

Codex는 복사 원본의 심볼릭 링크를 건너뛰고 새 체크아웃에 이미 있는 파일을 덮어쓰지 않습니다. 이 동작은 ChatGPT 데스크톱 앱의 로컬 관리형 작업 트리에 적용되며, 원격 작업 트리나 명령줄에서 직접 만든 Git 작업 트리에는 적용되지 않습니다.

브랜치 제한 사항

Codex가 작업 트리에서 작업을 마친 뒤 여기에서 브랜치 만들기 버튼을 사용해 해당 작업 트리에 feature/a 브랜치를 만들었다고 가정해 보겠습니다. 이제 이 브랜치를 로컬 체크아웃에서 사용하려고 합니다. 해당 브랜치를 체크아웃하면 다음 오류가 발생합니다:

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

이 문제를 해결하려면 작업 트리에서 feature/a 대신 다른 브랜치를 체크아웃해야 합니다.

브랜치를 로컬에서 체크아웃할 계획이라면 두 위치에서 같은 브랜치를 동시에 체크아웃 상태로 유지하려 하지 말고 전환 기능을 사용해 채팅을 로컬로 옮기세요.

이 제한이 있는 이유

브랜치는 작업 트리의 “현재 체크아웃된 상태”를 나타내는 변경 가능한 단일 참조(refs/heads/<name>)이므로, Git은 동일한 브랜치를 여러 작업 트리에서 동시에 체크아웃하지 못하도록 합니다.

브랜치를 체크아웃하면 Git은 해당 브랜치의 HEAD가 그 작업 트리에 속한다고 간주하며, 커밋, 리셋, 리베이스, 병합 등의 작업을 통해 해당 참조가 명확하게 정의된 절차에 따라 순차적으로 갱신된다고 전제합니다. 여러 작업 트리에서 같은 브랜치를 동시에 체크아웃할 수 있다면 어느 작업 트리의 작업이 브랜치 참조를 갱신하는지 모호해지고 경쟁 상태가 발생하여 커밋이 손실되거나 인덱스가 일치하지 않거나 충돌 해결 방식이 불분명해질 수 있습니다.

Git은 하나의 브랜치를 하나의 작업 트리에서만 체크아웃하도록 제한하여 각 브랜치에 기준이 되는 작업 사본이 하나만 존재하도록 보장합니다. 다른 작업 트리에서는 분리된 HEAD나 별도의 브랜치를 통해 동일한 커밋을 안전하게 참조할 수 있습니다.

작업 트리 정리

작업 트리는 디스크 공간을 많이 차지할 수 있습니다. 각 작업 트리마다 레포지토리 파일, 종속성, 빌드 캐시 등이 따로 있습니다. 이에 따라 ChatGPT 데스크톱 앱은 작업 트리 수를 적정 수준으로 유지하려고 합니다.

기본적으로 Codex는 가장 최근의 Codex 관리형 작업 트리 15개를 유지합니다. 디스크 사용량을 직접 관리하려면 설정에서 이 한도를 변경하거나 자동 삭제를 끌 수 있습니다.

Codex는 아직 필요한 작업 트리는 가급적 삭제하지 않습니다. Codex 관리형 작업 트리는 다음과 같은 경우 자동으로 삭제되지 않습니다:

  • 고정된 채팅이 연결되어 있는 경우
  • 채팅이 아직 진행 중인 경우
  • 해당 작업 트리가 영구 작업 트리인 경우

Codex 관리형 작업 트리는 다음과 같은 경우 자동으로 삭제됩니다:

  • 연결된 채팅을 보관 처리하는 경우
  • 설정한 한도를 유지하기 위해 Codex가 오래된 작업 트리를 삭제해야 하는 경우

Codex는 관리형 작업 트리를 삭제하기 전에 해당 작업 내용을 스냅샷으로 저장합니다. 작업 트리가 삭제된 후 채팅을 열면 복원 옵션이 표시됩니다.

자주 묻는 질문

작업 트리 생성 위치를 지정할 수 있나요?

예. Codex는 기본적으로 $CODEX_HOME/worktrees 하위에 관리형 작업 트리를 생성합니다. 다른 위치를 지정하려면 설정 > 작업 트리 메뉴를 열고 작업 트리 루트 항목을 변경하세요.

로컬과 작업 트리 간에 채팅을 이동할 수 있나요?

예. 채팅 헤더의 인계 기능을 사용해 로컬 체크아웃과 작업 트리 간에 채팅을 이동할 수 있습니다. Codex는 환경 간에 채팅을 안전하게 이동하는 데 필요한 Git 작업을 처리합니다. 나중에 채팅을 작업 트리로 다시 인계하면 Codex는 해당 채팅을 이전에 연결된 동일한 작업 트리로 되돌립니다.

작업 트리가 삭제되면 채팅은 어떻게 되나요?

해당 작업 트리 디렉터리가 삭제되어도 채팅은 기록에 남아 있을 수 있습니다. Codex 관리형 작업 트리의 경우 Codex는 작업 트리를 삭제하기 전에 스냅샷을 저장하고, 연결된 채팅을 다시 열면 복원 옵션을 제공합니다. 영구 작업 트리는 연결된 채팅을 보관 처리해도 자동으로 삭제되지 않습니다.