본문 바로가기

Git

git [ info: git work tree]

Git Worktree 학습

개발을 하다 보면 하나의 작업만 깔끔히 끝낼 수 있는 날이 거의 없습니다. 어떤 날은 기능 개발을 하다가 갑자기 버그 티켓이 튀어나오고, 또 어떤 날은 리뷰 요청이 들어와 브랜치를 옮겨가며 코드를 확인해야 합니다. 이런 상황에서 가장 귀찮은 일이 바로 브랜치를 바꾸기 위해 내 작업을 스태시하거나 중간 커밋을 남발하는 것입니다.

그래서 저는 Git Worktree를 잘 활용하고 있습니다. Worktree는 실무에서 체감 효율을 크게 올려주는 도구이며, 생산성이 눈에 띄게 좋아집니다.


Git Worktree란 무엇인가

Git Worktree는 하나의 Git 저장소 안에서 여러 개의 독립된 작업 디렉토리를 만들 수 있는 기능입니다. 즉, 하나의 저장소에서 여러 브랜치를 동시에 체크아웃하여 작업할 수 있는 환경을 제공합니다. 기존에는 브랜치를 바꾸기 위해 반드시 하나의 디렉토리 내에서 switch를 해야 했지만, Worktree를 사용하면 브랜치마다 별도의 디렉토리를 생성할 수 있어 작업 간 충돌을 완전히 방지할 수 있습니다.

실무에서는 다음과 같은 경우 Worktree가 유용합니다.

  • 긴 빌드나 테스트가 돌아가는 동안 다른 기능을 개발해야 할 때
  • 작업 도중에도 다른 브랜치의 코드 리뷰를 해야 할 때
  • 급한 핫픽스 브랜치를 따야 할 때
  • 여러 기능을 병렬로 진행해야 할 때

한마디로, 브랜치 이동 때문에 작업 흐름이 끊기는 문제를 Worktree가 깔끔하게 해결합니다.


Worktree를 사용할 때의 베스트 프랙티스

1) 메인 디렉토리는 항상 깨끗하게 유지합니다

저는 다음과 같은 구조를 권장합니다.

/project        # 메인 repo (거의 소스 작업하지 않음)
/worktrees
  /feature-login
  /feature-payment
  /bugfix-123

메인 프로젝트 폴더는 저장소 역할만 하고, 핫 픽스를 제외한 실제 개발은 전부 worktrees 폴더에서만 진행합니다.

2) 폴더 네이밍 규칙은 팀 내에서 통일합니다

브랜치명 그대로 폴더명으로 사용하는 방식을 추천합니다.

worktrees/feature/login
worktrees/fix/header-crash

3) 스크립트로 생성 및 삭제를 자동화합니다

사람이 직접 삭제하면 실수로 메타데이터가 꼬일 수 있으므로 반드시 Git 명령어로 제거해야 합니다.

git worktree remove worktrees/feature-login

4) 긴 테스트나 빌드가 걸리는 환경에서 특히 효과적입니다

테스트가 20분 이상 걸리는 서버 개발 프로젝트라면 Worktree는 사실상 필수입니다.


마무리

Git Worktree는 단순히 브랜치를 여러 개 켜놓는 기능이 아니라, 작업 흐름을 끊지 않고 여러 업무를 동시에 처리할 수 있게 해주는 강력한 개발 생산성 도구입니다. 특히 팀 단위에서 공통 폴더 구조와 네이밍 규칙을 정해 사용하면 개발 과정이 더욱 명확해지고, 실수로 인해 브랜치를 잃어버리는 문제도 줄어듭니다.