Unity Git 설정
팀 개발을 위한 Unity project Git 설정
Unity repository를 팀에서 안정적으로 쓰려면 serialization, meta file, text merge, 대용량 binary, locking을 각각 설계해야 합니다. 첫 실제 conflict가 생기기 전에 재현 가능한 baseline을 만드세요.
먼저 Unity baseline 설정하기
- Editor Settings > Asset Serialization을 Force Text로 설정합니다.
- Version Control에서 Visible Meta Files를 활성화합니다.
Assets/,Packages/,ProjectSettings/를 version control에 포함합니다.Library/,Temp/,Logs/, 로컬 build output을 제외합니다.
Asset을 옮길 때 해당 .meta도 같은 commit에서 함께 이동해야 합니다. Meta를 잃으면 GUID 관계가 바뀌어 reference가 깨질 수 있습니다.
.gitattributes에서 text merge와 binary storage 분리하기
*.unity text
*.prefab text
*.asset text
*.mat text
*.psd filter=lfs diff=lfs merge=lfs -text
*.fbx filter=lfs diff=lfs merge=lfs -text
*.wav filter=lfs diff=lfs merge=lfs -text
*.mp4 filter=lfs diff=lfs merge=lfs -text
Text serialized asset을 diff하거나 merge하려면 .unity와 .prefab을 일괄적으로 LFS binary로 처리하지 마세요. Smart Merge 또는 mergetool 규칙은 별도로 구성합니다.
Git LFS를 선택적으로 사용하기
Git LFS는 PSD, FBX, audio, video, 큰 texture처럼 text diff가 의미 없는 대용량 파일에 사용합니다. 모든 developer와 CI runner가 LFS를 설치했는지, hosting에서 lock이 작동하는지, 기존 binary history를 어떻게 이전할지 확인하세요.
확장자만 보지 말고 실제 크기, 변경 빈도, merge 가능성을 기준으로 규칙을 정합니다.
Smart Merge에 semantic review 더하기
UnityYAMLMerge는 text serialized scene과 prefab을 자동 merge할 수 있습니다. 그러나 hierarchy, reference, prefab override 변경은 결과를 검토해야 합니다. MergeSight의 Git 기반 Unity review는 Base/Ours/Theirs를 Unity 구조로 보여주고 위험한 결과를 쓰기 전에 확인하게 합니다.
공식 git mergetool 경로와 별도의 merge driver 중 어떤 방식을 쓰는지 문서화하세요. 둘 다 가능하지만 동일한 Git 설정은 아닙니다.
필요한 asset만 lock하기
Lock은 대용량 binary source와 병렬 편집 비용이 큰 일부 asset에 적합합니다. 모든 text serialized scene과 prefab을 잠그면 유용한 병렬 작업까지 막을 수 있습니다. Additive scene, prefab ownership, 명확한 인계 규칙과 함께 사용하세요.
일상적인 팀 workflow
- 작업 시작 전 pull하고 LFS lock을 확인합니다.
- 작고 목적이 명확한 commit을 만듭니다.
- Push 전에 scene/prefab 변경을 의미 기반으로 review합니다.
- Base/Ours/Theirs로 conflict를 해결하고 Unity에서 열어 Console을 확인합니다.
- CI에서 conflict marker, missing meta, broken reference, asset import를 검증합니다.
의도적인 conflict로 설정 검증하기
git check-ignore -v Library/
git check-attr -a -- Assets/Scenes/Main.unity
git lfs track
git status
그다음 두 test branch에서 같은 scene의 서로 다른 object를 변경하세요. Merge invocation, review, backup, Unity import, CI를 확인한 뒤 팀 표준으로 적용합니다.
자주 묻는 질문
Unity의 어떤 folder를 Git에 넣어야 하나요?
일반적으로 Assets, Packages, ProjectSettings를 version control에 포함합니다. Library, Temp, Logs, Obj, 로컬 build와 IDE output은 생성 파일이므로 .gitignore에 둡니다.
.unity와 .prefab을 Git LFS에 넣어야 하나요?
일괄 적용하지 마세요. Force Text에서는 text serialized 파일이라 Unity-aware diff와 merge가 가능합니다. LFS는 주로 대용량 binary source에 사용하고, 필요한 high-risk asset만 별도 locking을 고려합니다.
Unity project에 UnityYAMLMerge가 필요한가요?
Scene과 prefab을 병렬 수정하는 팀에는 유용한 Smart Merge baseline입니다. 다만 중요한 구조나 reference 변경은 생성 결과를 review하고 validate해야 합니다.
.gitattributes 적용 여부는 어떻게 확인하나요?
git check-attr로 특정 파일의 attribute를 확인할 수 있습니다. Attribute만으로 mergetool 또는 driver 실행까지 보장되지는 않으므로 실제 test conflict도 수행하세요.
핵심 정리
Text와 binary 분리
Force Text는 Unity asset diff를 유지하고 LFS는 대용량 binary를 담당합니다.
Meta file도 asset의 일부
Asset과 .meta를 함께 이동하고 commit하고 review합니다.
실제 conflict로 시험
Attributes, mergetool, LFS, CI 구성 오류를 운영 전에 찾을 수 있습니다.