Git 워크트리: 브랜치 전환의 불편함을 해소하는 방법
Working with Git Worktrees in Magit
Hacker NewsGit 워크트리는 하나의 저장소에 여러 개의 독립적인 작업 디렉토리를 추가하여, 브랜치 전환의 불편함 없이 병렬 작업을 가능하게 하는 기능입니다.
- 메인 개발 환경을 그대로 유지하면서 다른 브랜치를 완전히 분리된 상태로 체크아웃할 수 있어, AI 에이전트 작업 격리나 동시 테스트에 매우 유용합니다.
- 장시간 테스트와 PR 검토 등 복잡한 워크플로우를 방해받지 않고 효율적으로 관리할 수 있어 개발 생산성을 크게 높여줍니다.
- 다만, Git이 추적하지 않는 의존성이나 빌드 캐시 같은 파일들은 각 워크트리마다 별도로 재설정해야 하는 번거로움이 있습니다.
브랜치는 커밋에 대한 이동 가능한 포인터이지만, 저장소가 단일 작업 디렉토리를 가지고 있기 때문에 여러 브랜치를 오가며 작업할 경우 해당 디렉토리를 계속 전환해야 하는 번거로움이 있습니다. 이 과정은 특히 두 브랜치가 서로 다른 빌드 상태를 가질 때 더욱 복잡해집니다. worktree는 이러한 문제를 해결하기 위해 동일한 저장소에 추가적인 독립된 작업 디렉토리를 제공합니다.
worktree는 객체 데이터베이스(object database), refs, stashes 등을 공유하지만, 각 worktree는 자체적인 HEAD와 인덱스를 가집니다. 따라서 장시간 테스트를 한 브랜치에서 진행하는 동안 다른 브랜치에서 작업을 하거나, 가 격리된 환경에서 병렬로 작동할 때 등 두 가지 작업이 동시에 필요할 때 유용합니다.
worktree 사용 시 주의해야 할 점은 Git이 추적하지 않는 파일들(예: 의존성, 빌드 캐시)은 각 worktree마다 별도로 설정해야 한다는 것입니다. 또한, 작업을 마친 후에는 `Z k` 또는 `git worktree remove` 명령어로 삭제하고, 수동으로 디렉토리를 제거했을 경우 `git worktree prune`을 실행하여 남은 기록들을 정리하는 것이 권장됩니다.
Emacs의 Magit은 worktree 지원 기능을 제공하며, 이를 통해 사용자는 기존 브랜치를 새 worktree로 체크아웃하거나 새로운 브랜치와 worktree를 한 번에 생성할 수 있습니다. 각 worktree는 독립적인 Magit 상태 버퍼를 가지며, `Z g` 명령을 사용하여 다른 worktree의 상태 버퍼로 이동하는 것이 주요 전환 메커니즘입니다.
용어 풀이
- AI 에이전트
- 목표를 받으면 스스로 계획을 세우고 도구를 써서 여러 단계의 작업을 해내는 AI.