Featured image of post Git Worktree와 Git Branch 개발의 차이점은 무엇인가요? 어떤 상황에서 Git Worktree를 사용해야 하나요?

Git Worktree와 Git Branch 개발의 차이점은 무엇인가요? 어떤 상황에서 Git Worktree를 사용해야 하나요?

새 기능 개발 중에 갑자기 버그를 수정해야 한 적이 있나요? 엉망이 된 환경과 빌드 찌꺼기 때문에 짜증나지 않으셨나요? 이 글에서는 Git Worktree를 사용하여 '지점'을 개설하는 논리로 진정한 병렬 개발과 환경 격리를 실현하여 개발 흐름을 끊기지 않게 하는 방법을 알려드립니다!

새로운 기능을 개발하는 도중에 상사가 갑자기 와서 긴급히 수정해야 할 버그가 있다고 하면 어떻게 하시겠습니까?

대부분의 사람들은 아마도 git stash를 사용하여 작성 중이던 코드를 서랍에 밀어 넣고, 브랜치를 전환하여 버그를 수정할 것입니다.

하지만 변경 사항에 대규모 환경 설정이 포함되어 있거나, 브랜치 전환으로 인해 node_modules빌드 결과물(Build Artifacts)이 서로 오염된다면, 키보드를 부수고 싶어질 것입니다.

이럴 때 Git Worktree가 구세주가 될 수 있습니다!

Git Worktree란 무엇인가요?

Git의 작동 방식을 “집 리모델링"으로 생각할 수 있습니다.

기존의 git branch를 사용하면, 브랜치를 전환할 때 방 안의 가구가 순식간에 눈앞에서 사라지고 다른 작업에 맞게 자동으로 재배치됩니다.

공간은 절약되지만 **“환경 오염”**이라는 단점이 있습니다. 브랜치를 전환하기 전에 씻지 않은 접시를 캐비닛에 넣어야 하며, 전환 후에도 이전 작업의 기름 냄새가 공기 중에 남아 있을 수 있습니다.

반면, Git Worktree옆 공터에 똑같은 집을 직접 짓는 것과 같습니다.

간단히 말해서, Git의 핵심 원리는 다음과 같습니다:

“하나의 영혼(.git 데이터베이스), 여러 개의 육체(작업 디렉토리).”

“기능 개발 지점"과 “긴급 수리 지점"을 동시에 소유할 수 있습니다. 왼손으로 창 A에서 AI 로직을 작성하고, 오른손으로 창 B에서 버그를 수정해도 두 작업은 서로 간섭하지 않습니다. 이것이 바로 진정한 병렬 개발입니다.

Worktree 실전 가이드

개발 중 몰입 상태를 유지하려면 디렉토리 구조와 환경 설정이 중요합니다.

1. 병렬 디렉토리 관리: 본사 안에 지점을 짓지 마세요

Worktree를 처음 사용하는 많은 사람들이 실수로 원래 프로젝트 폴더 내부에 새 디렉토리를 생성합니다. 절대 이렇게 하지 마세요! 그러면 Git이 무한 재귀의 혼란에 빠지게 됩니다. Git Worktree를 올바르게 생성하는 방법은 다음과 같습니다:

본사(main)와 작업 지점(feature)을 평행하게 배치합니다.

# 본사에서 Worktree 생성을 실행하되, Worktree 디렉토리를 원래 프로젝트 디렉토리 외부에 배치합니다.
git worktree add ../my-app-feat-ai dev-branch

디렉토리 구조는 다음과 같이 보여야 합니다:

- my-project/       # 대형 패키지
  - main-repo/      # 안정적인 본사
  - feat-ai-search/ # 건설 중인 새로운 지점

2. 환경 설정 격리: 각 지점에 고유한 영혼 부여하기

프로젝트 디렉토리가 분리되었으므로, .env 설정 파일도 분리할 수 있습니다.

feat-ai-search에서는 테스트용 데이터베이스에 연결하고, main에서는 원래의 개발 데이터베이스를 유지할 수 있습니다. 이렇게 하면 창을 전환할 때 연결 정보를 수정할 필요초차 없습니다.

Worktree 디렉토리에 들어간 후, 해당 Worktree 디렉토리의 환경 변수를 직접 사용하여 개발을 진행할 수 있으며, 환경 전환이나 재구축을 할 필요가 없습니다. “발을 들이자마자 바로 일을 시작할 수 있는” 그 느낌은 정말 환상적입니다.

Worktree 병합 워크플로우

Worktree 내부에서 개발을 마친 후의 워크플로우는 기존 브랜치와 동일하며, 마지막에 “철거"라는 동작이 하나 더 추가될 뿐입니다.

워크플로우 단계 설명
1. 지점에서 커밋 (Commit & Push) 승인을 하려면 지점에 직접 가야 합니다.
2. 본사 검수 (Merge) main으로 돌아가 병합하거나 직접 Pull Request (PR)를 열 수 있습니다.
3. 안전한 철거 (Remove) 작업이 완료되면 폴더를 직접 삭제하지 마세요. Git 명령어를 사용하여 철거해야 합니다: git worktree remove ../feat-ai-search

쾅! 임시 Worktree 오두막이 철거되고 디스크 공간이 확보되었으며, 본사는 여전히 깨끗한 상태를 유지합니다.

Worktree 주의사항 안내

Worktree는 유용하지만 몇 가지 주의해야 할 점이 있습니다:

항목 설명
본사를 함부로 옮기지 마세요 Worktree는 절대 경로를 기록하기 때문입니다. 본사 디렉토리 이름을 변경하면 Worktree 지점은 “영혼"을 찾지 못해 죽어버립니다.
이중 브랜치 금지 같은 브랜치를 두 개의 Worktree에서 동시에 사용할 수 없습니다.
청소 로봇 prune 만약 실수로 rm -rf를 사용하여 폴더를 삭제했다면, 반드시 git worktree prune을 실행하여 .git에 남은 기록을 정리하세요.

결론: Git Branch 사용을 그만둬야 할까요?

시나리오에 따라 적합한 개발 방식이 다릅니다. 하나가 다른 것을 대체하는 문제가 아니라, 어떤 것이 더 적합한가의 문제입니다.

시나리오 설명
일상적인 사소한 수정 계속해서 branch를 사용하세요. 가볍고 빠릅니다.
규모가 큰 작업 예를 들어, 대규모 리팩토링, 여러 환경 변수에 걸친 조정 또는 AI와 장시간 협업해야 하는 작업 등에는 Worktree를 시작하는 것이 절대적으로 최고의 선택입니다.

Git Worktree는 단순한 명령어를 넘어 우리의 개발 몰입 상태를 유지하는 데 도움을 주는 강력한 도구입니다. 다음번에 번거롭고 광범위한 작업에 직면하면, 독립적인 **“Git Worktree 지점”**을 열고 이전에는 경험하지 못한 원활한 개발 프로세스를 경험해보세요!

Reference

All rights reserved,未經允許不得隨意轉載
Hugo로 만듦
JimmyStack 테마 사용 중