콘텐츠로 이동

Git Worktree로 Unity 플랫폼별 작업 폴더 분리하기

Unity에서 플랫폼을 바꿀 때(PC ↔ Android ↔ iOS)마다 “Re-importing Assets…” 진행 바를 기다려야 한다. git clone을 여러 번 하지 않고도 플랫폼별 프로젝트를 동시에 띄워 놓고 작업할 수 있는 방법이 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하는 과정이 필요하다.
  • 플랫폼 스위칭 시간이 사라진다. 메인 폴더는 PC, 서브 폴더는 Android로 설정해 두면 각 폴더가 독립된 Library 폴더를 가지므로, 해당 폴더의 Unity를 켜기만 하면 되고 재임포트가 없다.
  • 디스크 용량이 절약된다. 모든 Worktree가 하나의 .git 폴더를 공유하고, 추가된 폴더는 소스 코드와 Library 용량만 차지한다.
  • 히스토리를 실시간으로 공유한다. 같은 저장소를 바라보므로 Android 폴더에서 커밋하면 PC 폴더에서도 바로 로그를 확인할 수 있다.

터미널(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 등록 및 플랫폼 설정”
  1. Unity Hub를 실행하고 Add(추가)를 클릭한다.
  2. 방금 생성한 ../MyProject-Android 폴더를 선택해 추가한다.
  3. 해당 프로젝트를 열고 Build Settings에서 Android로 Switch Platform을 실행한다.
    • 최초 1회만 임포트 시간이 걸린다.
    • 이후로는 이 폴더를 열면 항상 Android 상태가 유지된다.
터미널 창
# iOS용 브랜치를 따로 따서 iOS 폴더 생성
$ git worktree add -b build/ios ../MyProject-iOS develop

같은 방법으로 Unity Hub에 추가하고 플랫폼을 iOS로 바꿔 둔다.

새로 생성된 워크트리 폴더는 초기화된 상태라 Library, Temp 폴더가 새로 생긴다. git status를 실행했을 때 Library/ 폴더가 추적되지 않도록 .gitignore가 제대로 설정되어 있는지 확인한다.

  1. PC 폴더(Main)에서 기능을 개발하고 commit과 push를 한다.
  2. Android 폴더로 이동해 git pull origin develop(혹은 merge)을 하면 변경 사항이 바로 반영된다.
  3. 플랫폼 스위칭 없이 바로 빌드하면 된다.

브랜치 이름을 따로 만들기 싫다면 (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
  1. Worktree를 쓰면 PC / Android / iOS 환경을 동시에 띄울 수 있다.
  2. .git을 공유하므로 용량이 적게 들고, 한 폴더의 커밋을 다른 폴더에서 바로 볼 수 있다.
  3. Library 캐시가 분리되므로 플랫폼 스위칭 대기가 사라진다.