Scene conflict workflow
Git에서 Unity scene merge conflict를 안전하게 해결하는 방법
Unity scene conflict는 단순한 text conflict가 아닙니다. 안전한 해결은 세 버전을 먼저 보존하고, Smart Merge를 출발점으로 사용하며, object structure와 reference를 검토하고, commit 전에 Unity에서 결과를 검증합니다.
Scene conflict가 text 문제만은 아닌 이유
.unity 파일에는 GameObject, component, 기타 serialized object가 들어 있습니다. fileID는 component와 owner를 연결하고, GUID는 외부 asset을 참조하며, Transform 관계가 hierarchy를 만듭니다. 서로 다른 YAML 줄이 같은 논리 구조를 바꿀 수 있습니다.
Order, reparenting, delete-vs-edit, prefab override는 문법상 유효한 YAML 결과도 의미적으로 잘못될 수 있는 대표적인 경우입니다.
안전한 8단계 workflow
- 편집 중단: conflict 상태의 scene을 더 저장하지 않습니다.
- Status 확인:
git status로 파일, branch, 미commit 변경을 기록합니다. - Base/Ours/Theirs 보존: 세 revision을 각각 별도 임시 파일로 내보냅니다.
- 한쪽을 성급히 버리지 않기: ours 또는 theirs를 파일 전체에 즉시 적용하지 않습니다.
- UnityYAMLMerge 실행: 첫 structural merge 시도로 Smart Merge를 사용합니다.
- 의미 검토: hierarchy, component, property, reference, prefab override를 비교합니다.
- Unity에서 validate: import, scene open, Console, 관련 workflow를 점검합니다.
- 범위를 좁혀 commit: conflict resolution과 필요한 meta 변경만 포함합니다.
Base, Ours, Theirs를 올바르게 읽기
Base는 공통 시작점, Ours는 현재 checkout한 branch, Theirs는 들어오는 branch의 버전입니다. 이름이 정답과 오답을 뜻하지는 않습니다.
MergeSight의 투명한 scene conflict review는 세 입력을 Unity object로 보여주므로 파일 전체가 아니라 변경별로 결정할 수 있습니다.
Merge 후 확인할 항목
- GameObject가 의도치 않게 삭제, 복제, rename되지 않았는지.
- Parent-child 관계와 root order가 맞는지.
- Component가 올바른 GameObject에 속하는지.
- GUID와 fileID reference가 존재하는 object와 asset을 가리키는지.
- Prefab instance, source link, override가 유지되는지.
- Missing Script, conflict marker, 새 Console error가 없는지.
중요한 Play Mode 또는 Edit Mode test도 실행하세요. Import 가능하다는 사실만으로 level 의도가 맞다는 뜻은 아닙니다.
Merge를 버리고 다시 시작해야 할 때
Base/Ours/Theirs를 특정할 수 없거나 YAML parser가 실패하거나 object identity가 모호하거나 대량의 marker를 수동으로 고쳐야 한다면 중단하세요. 보존한 입력으로 돌아가 작고 재현 가능한 단계로 다시 해결하는 편이 안전합니다.
앞으로의 scene conflict 줄이기
- 큰 level을 ownership이 명확한 additive scene으로 나눕니다.
- 재사용 system을 공유 scene에서 prefab으로 옮깁니다.
- High-risk asset만 선택적으로 lock하고 병렬 변경을 미리 공유합니다.
- 작은 commit을 만들고 branch를 자주 동기화합니다.
- Pull request와 CI에 scene/prefab review와 validation을 넣습니다.
자주 묻는 질문
Git의 Unity scene merge conflict는 어떻게 해결하나요?
Base, Ours, Theirs를 보존하고 UnityYAMLMerge를 첫 structural 시도로 실행한 뒤 결과를 의미 기반으로 검토합니다. Unity에서 scene, reference, hierarchy, Console을 확인한 후 commit하세요.
Unity scene에서 ours와 theirs 중 무엇을 선택해야 하나요?
한쪽이 다른 쪽을 완전히 대체해야 한다고 확인된 경우에만 전체 선택을 하세요. 대부분의 팀 conflict에는 양쪽 모두 필요한 변경이 있으므로 object 단위 검토가 필요합니다.
UnityYAMLMerge가 모든 scene conflict를 해결하나요?
아니요. Delete-vs-edit, 모호한 object identity, 복잡한 hierarchy 변경, 손상된 입력에는 수동 decision과 추가 validation이 필요할 수 있습니다.
Merge한 scene이 열리는데도 잘못될 수 있는 이유는?
문법상 유효한 YAML도 hierarchy, reference, component ownership, prefab override가 의미적으로 잘못될 수 있기 때문입니다.
Unity scene conflict를 예방하려면 어떻게 하나요?
Additive scene, prefab ownership, 선택적 lock, 작은 commit, 잦은 sync, semantic review를 함께 사용하세요. 실제 병렬 작업이 있다면 conflict를 완전히 없앨 수는 없습니다.
핵심 정리
세 입력을 보존
Base/Ours/Theirs가 decision을 추적 가능하게 하고 안전한 재시작을 돕습니다.
YAML보다 구조를 검토
Hierarchy, component, override, reference가 실제 의미를 결정합니다.
마지막은 Unity validation
Import, Console, test, level 의도를 commit 전에 확인합니다.