Git Worktree로 Unity 플랫폼별 작업 폴더 분리하기
Unity에서 플랫폼을 바꿀 때(PC ↔ Android ↔ iOS)마다 “Re-importing Assets…” 진행 바를 기다려야 한다. git clone을 여러 번 하지 않고도 플랫폼별 프로젝트를 동시에 띄워 놓고 작업할 수 있는 방법이 Git Worktree다.
1. Git Worktree란
섹션 제목: “1. Git Worktree란”브랜치와 무엇이 다른가
섹션 제목: “브랜치와 무엇이 다른가”둘은 서로 보완하는 개념이다.
| 구분 | Branch (브랜치) | Worktree (워크트리) |
|---|---|---|
| 정의 | 코드의 버전(논리적 흐름)을 분리 | 작업을 수행하는 폴더(물리적 공간)를 분리 |
| 역할 | “기능 개발용”, “배포용” 코드 구분 | “PC 버전용 폴더”, “Android 버전용 폴더” 구분 |
| 기존 방식 | 한 번에 하나의 브랜치만 Checkout 가능 | 여러 브랜치를 서로 다른 폴더에 동시에 Checkout 가능 |
| 비유 | TV 채널 (한 번에 채널 하나만 시청) | TV 수상기 (거실 TV엔 뉴스, 안방 TV엔 드라마를 동시에 틀어 둠) |
2. Unity 개발에서 쓸모 있는 이유
섹션 제목: “2. Unity 개발에서 쓸모 있는 이유”Unity에서 플랫폼을 변경(Switch Platform)하면 해당 플랫폼에 맞춰 에셋을 다시 임포트하고 Library 폴더(캐시)를 갱신한다. 프로젝트 규모가 클수록 이 시간이 10분에서 1시간까지 걸린다.
기존 해결책: git clone 여러 번 받기
섹션 제목: “기존 해결책: git clone 여러 번 받기”- 디스크 용량이 낭비된다. 20GB 프로젝트를 3개 받으면 60GB 이상 든다. 각 클론이
.git히스토리 데이터를 따로 가진다. - 동기화가 불편하다. A 폴더에서 작업 후 Push하고 B 폴더에서 Pull하는 과정이 필요하다.
git worktree 사용
섹션 제목: “git worktree 사용”- 플랫폼 스위칭 시간이 사라진다. 메인 폴더는 PC, 서브 폴더는 Android로 설정해 두면 각 폴더가 독립된
Library폴더를 가지므로, 해당 폴더의 Unity를 켜기만 하면 되고 재임포트가 없다. - 디스크 용량이 절약된다. 모든 Worktree가 하나의
.git폴더를 공유하고, 추가된 폴더는 소스 코드와Library용량만 차지한다. - 히스토리를 실시간으로 공유한다. 같은 저장소를 바라보므로 Android 폴더에서 커밋하면 PC 폴더에서도 바로 로그를 확인할 수 있다.
3. 적용 절차
섹션 제목: “3. 적용 절차”터미널(Git Bash, iTerm, Terminal)을 열고 프로젝트 루트 경로에서 실행한다.
1단계: Android 빌드용 워크트리 생성
섹션 제목: “1단계: Android 빌드용 워크트리 생성”그래서 아래처럼 새 브랜치를 만들면서(-b) 워크트리를 만든다.
# 문법: git worktree add -b <새_브랜치명> <생성할_폴더_경로> <기반_브랜치>
# 예시: develop 브랜치를 기반으로 'build/android'라는 새 브랜치를 만들며 폴더 생성$ git worktree add -b build/android ../MyProject-Android develop이 명령을 실행하면 상위 폴더(../)에 MyProject-Android 폴더가 생기고, 그 안은 build/android 브랜치 상태가 된다. 메인 폴더는 여전히 develop을 보고 있으므로 충돌이 없다.
2단계: Unity Hub 등록 및 플랫폼 설정
섹션 제목: “2단계: Unity Hub 등록 및 플랫폼 설정”- Unity Hub를 실행하고
Add(추가)를 클릭한다. - 방금 생성한
../MyProject-Android폴더를 선택해 추가한다. - 해당 프로젝트를 열고 Build Settings에서 Android로 Switch Platform을 실행한다.
- 최초 1회만 임포트 시간이 걸린다.
- 이후로는 이 폴더를 열면 항상 Android 상태가 유지된다.
3단계: iOS용 폴더가 필요하면
섹션 제목: “3단계: iOS용 폴더가 필요하면”# iOS용 브랜치를 따로 따서 iOS 폴더 생성$ git worktree add -b build/ios ../MyProject-iOS develop같은 방법으로 Unity Hub에 추가하고 플랫폼을 iOS로 바꿔 둔다.
4. 자주 묻는 질문과 팁
섹션 제목: “4. 자주 묻는 질문과 팁”.gitignore 확인
섹션 제목: “.gitignore 확인”새로 생성된 워크트리 폴더는 초기화된 상태라 Library, Temp 폴더가 새로 생긴다. git status를 실행했을 때 Library/ 폴더가 추적되지 않도록 .gitignore가 제대로 설정되어 있는지 확인한다.
코드 동기화 방법
섹션 제목: “코드 동기화 방법”- PC 폴더(Main)에서 기능을 개발하고
commit과push를 한다. - Android 폴더로 이동해
git pull origin develop(혹은 merge)을 하면 변경 사항이 바로 반영된다. - 플랫폼 스위칭 없이 바로 빌드하면 된다.
브랜치 이름을 따로 만들기 싫다면 (Detached HEAD)
섹션 제목: “브랜치 이름을 따로 만들기 싫다면 (Detached HEAD)”build/ios 같은 브랜치를 굳이 만들고 관리하고 싶지 않다면 Detached HEAD 상태를 이용할 수 있다. 특정 브랜치(이름) 대신 특정 시점(커밋 해시)을 직접 체크아웃하는 상태다. 브랜치 이름을 점유하지 않으므로 중복 체크아웃 제약에 걸리지 않는다.
사용법은 다음과 같다.
# develop 브랜치의 현재 상태를 보고 싶지만, 브랜치 이름은 점유하지 않겠다 (--detach)$ git worktree add --detach ../MyProject-iOS develop이렇게 하면 PC와 iOS 폴더 모두 develop의 코드를 볼 수 있다.
- PC 폴더:
develop브랜치 (수정 및 커밋 가능) - iOS 폴더:
develop의 특정 시점 (브랜치 없이 커밋 하나를 체크아웃한 상태라 빌드 테스트용으로 쓴다)
# 메인 프로젝트 폴더에서 실행$ git worktree remove ../MyProject-Android- Worktree를 쓰면 PC / Android / iOS 환경을 동시에 띄울 수 있다.
.git을 공유하므로 용량이 적게 들고, 한 폴더의 커밋을 다른 폴더에서 바로 볼 수 있다.Library캐시가 분리되므로 플랫폼 스위칭 대기가 사라진다.