왜 모든 새로운 worktree가 새로 설치하는 것처럼 느껴질까
Git worktrees는 여러 브랜치를 동시에 관리할 수 있는 강력한 방법을 제공합니다. 단일 저장소의 기록을 공유하면서도 각 worktree는 별도의 작업 디렉토리를 유지합니다. 이러한 분리 방식은 여러 기능을 동시에 작업하거나 여러 AI 코딩 에이전트를 배포할 때 병렬 개발을 수행하기에 매우 좋습니다.
문제는 이것입니다: 새로운 worktree는 거의 비어 있는 상태로 시작됩니다. Git은 코드를 복사하지만, 추적되지 않는 파일과 디렉토리는 의도적으로 무시합니다. 즉, JavaScript 프로젝트의 node_modules, ..env 설정 파일, 또는 Rust의 target/ 빌드 디렉토리와 같은 중요한 구성 요소들이 완전히 누락됩니다.
결과적으로, 모든 새로운 worktree는 전체 콜드 설치 및 빌드 프로세스를 요구합니다. 의존성을 다시 설치하고, 코드를 다시 컴파일하며, 캐시를 다시 생성해야 합니다. 5개나 10개의 코딩 에이전트를 실행하면서 각각 별도의 환경이 필요하다고 상상해 보십시오.
각 에이전트는 자체적으로 npm install, cargo build 또는 기타 설정을 수행합니다. 이는 부담을 배가시킵니다. 5개의 에이전트는 5번의 개별 설치, 5번의 콜드 빌드, 그리고 5배의 디스크 공간 소비를 의미합니다. 유용한 작업이 시작되기도 전에 준비 과정만으로 상당한 시간, CPU 사이클, 그리고 기가바이트 단위의 저장 공간을 낭비하게 됩니다.
속도 향상의 핵심인 Copy-on-write 단축키
오픈 소스 Rust CLI인 Worktrunk는 wt step copy-ignored 명령어를 통해 영리한 해결책을 제시합니다. 이 유틸리티는 파일 시스템 기능인 copy-on-write (CoW)를 활용하여, 전통적인 전체 복사 방식 없이도 선택한 무시된 파일들을 새로운 worktree로 즉시 가져옵니다.
Copy-on-write는 멋진 트릭입니다. 파일은 처음에 동일한 기본 디스크 블록을 공유합니다. 한 worktree에서 파일을 수정하면, 파일 시스템은 변경된 블록만 새로운 위치로 복사합니다. 이는 거대한 파일을 중복 복사하는 초기 비용을 피하면서도 worktree 간의 격리를 유지합니다. 마치 실제로 달라질 때만 공간을 차지하는 마법 같은 여러 복사본을 가진 것과 같습니다.
이 접근 방식은 설정 속도를 획기적으로 높여줍니다. 영상에서는 인상적인 성과를 보여줍니다. 14 GB Rust 빌드 폴더를 복사하는 시간이 약 2분에서 약 20초로 단축되었습니다. 더 좋은 점은, 일반적인 새로운 worktree에서 약 68초가 걸리던 첫 빌드가 3~4초로 줄어들 수 있다는 것입니다.
이는 저자가 보고한 결과로, macOS APFS나 Linux btrfs 및 XFS와 같이 reflink를 지원하는 파일 시스템에서의 잠재력을 보여줍니다. 모든 설정에서 보장되는 결과는 아니지만, 이러한 수치는 특히 대규모 빌드 캐시나 node_modules 디렉토리를 다룰 때 CoW가 제공할 수 있는 상당한 콜드 스타트 감소 효과를 입증합니다.
마법을 기대하기 전에 파일 시스템을 확인하세요
즉각적인 결과를 기대하기 전에 시스템의 기능을 확인하는 것이 중요합니다. Copy-on-write (CoW) 또는 reflink는 파일 시스템과 구성에 따라 다릅니다. APFS를 실행하는 많은 Mac과 btrfs 및 XFS와 같은 Linux 파일 시스템은 이 기능을 지원하지만, 지원되지 않는 설정에서는 느린 전통적인 복사 방식으로 돌아갑니다.
중요한 점은 CoW가 하드 링크나 공유 가변 디렉토리와는 다르다는 것입니다. 한 worktree에서 파일을 수정하면 파일 시스템은 변경된 블록만 복제하므로 다른 worktree의 파일은 그대로 유지됩니다. 이를 통해 병렬 환경 간에 예기치 않은 변경 사항이 발생하는 것을 방지할 수 있습니다.
실질적인 영향을 이해하려면 실제 프로젝트와 드라이브에서 Worktrunk의 wt step copy-ignored 명령을 테스트해 보아야 합니다. 경과 시간과 디스크 사용량을 모두 측정해 보세요. 패키지 관리자, 빌드 도구 캐시, 심지어 복사할 항목을 세밀하게 제어하는 .worktreeinclude 설정과 같은 요소들이 결과에 영향을 줄 수 있습니다.
예를 들어, 14GB 크기의 Rust 빌드 폴더를 일반적인 방식으로 복사하면 약 2분이 소요되며 추가로 14GB의 용량을 차지합니다. Reflink를 사용하면 이 시간은 약 20초로 단축되고, 추가 디스크 공간은 사실상 0이 됩니다. 이를 통해 콜드 빌드 시간을 약 68초에서 3~4초로 획기적으로 줄일 수 있습니다. 병렬 AI 에이전트를 위한 Git 워크플로우 최적화에 대해 더 알아보려면 Worktrunk — Git worktree management for parallel AI agent workflows를 방문하세요. 이 수치는 예시일 뿐이며, 실제 환경에 따라 결과는 다를 수 있습니다!
이 글이 마음에 드셨나요? 매일 아침 이런 글을 메일로 받아보세요.
하루 한 통 · 두 번의 클릭으로 구독 취소 · 제3자 추적 없음
빠른 시작을 안전하고 반복 가능하게 만드세요
Worktrunk의 라이프사이클 훅에 wt step copy-ignored를 추가하여 자동화하세요. 이렇게 하면 새로운 워크트리가 유용한 캐시를 자동으로 상속받게 되지만, .worktreeinclude 파일을 사용하여 복사할 무시된 경로를 지정해야 합니다. 예를 들어, Rust 프로젝트의 경우 target/을, JavaScript의 경우 node_modules/를 포함하되, 임시 로그 파일은 제외하세요.
경로를 신중하게 선택하세요. ..env 파일에는 종종 보안 정보가 포함되어 있으므로 일반적으로 복사해서는 안 됩니다. 캐시나 생성된 아티팩트 역시 오래되었거나 특정 환경에 종속적일 수 있어 디버깅하기 어려운 문제를 야기할 수 있습니다. 무시된 모든 파일이 공유하기에 안전하거나 유익한 것은 아니므로 주의해서 선택하세요.
이 최적화 작업을 신중하게 도입하세요. 먼저 단일 워크트리에서 시도해 보고, 적절한 격리와 빌드 정확성을 확인하세요. 새로운 워크트리의 콜드 스타트 성능을 완전히 깨끗한 설정과 벤치마킹하여 속도 향상을 확인하세요. Rust 빌드 시간을 68초에서 3~4초로 줄이는 것과 같은 극적인 효과를 볼 수 있습니다.
검증이 완료되면 팀의 에이전트 워크플로우를 위해 복사 단계를 자동화하세요. 이를 통해 일관성을 보장하고 즉각적인 워크트리 프로비저닝의 이점을 극대화하여, 콜드 스타트를 따뜻하고 생산적인 시작으로 바꿀 수 있습니다.
자주 묻는 질문(FAQ)
Worktrunk의 copy-ignored 명령은 어떤 역할을 하나요?
기존 워크트리에서 gitignore된 파일들을 새로운 워크트리로 복사하며, 파일 시스템이 지원하는 경우 copy-on-write 방식을 사용합니다.
Copy-on-write는 모든 드라이브에서 작동하나요?
아니요. 파일 시스템 및 플랫폼 지원 여부에 따라 다릅니다. APFS, btrfs 및 일부 XFS 설정은 reflink를 지원하지만, 그렇지 않은 경우 복사에 더 많은 시간과 디스크 공간이 소요될 수 있습니다.
.env 파일을 다른 워크트리로 복사해도 안전한가요?
동일한 보안 정보와 설정이 해당 환경에서도 적절한 경우에만 안전합니다. 포함할 항목을 검토하고 신뢰할 수 없는 프로젝트나 에이전트와 자격 증명을 공유하지 않도록 주의하세요.
명령어는 어떻게 사용하나요?
Worktrunk를 설치하고 워크트리 설정의 일부로 wt step copy-ignored를 실행하세요. 최신 옵션 및 설정에 대해서는 Worktrunk 문서를 확인하세요.

