Unity Scene merge를 UnityYAMLMerge로 해결하기
서로 다른 브랜치에서 같은 Unity Scene을 작업한 뒤 merge하면, 분명 공통으로 건드린 오브젝트가 없어 보이는데도 충돌이 나는 경우가 있습니다.
Unity Scene 파일은 YAML 텍스트 형식입니다. 사람이 보기에는 Scene 안의 오브젝트 단위로 나뉘어 있지만, Git 입장에서는 일반 텍스트 파일입니다. 그래서 서로 다른 GameObject를 수정했더라도 YAML 안에서 비슷한 위치의 텍스트가 바뀌면 일반 텍스트 merge가 충돌로 판단할 수 있습니다.
이럴 때는 Unity Scene과 Prefab의 구조를 이해하는 merge 도구가 필요합니다. Unity는 Editor 설치와 함께 UnityYAMLMerge라는 Smart Merge 도구를 제공합니다.
UnityYAMLMerge는 .unity, .prefab 파일을 단순 텍스트가 아니라 Unity YAML 구조로 해석해서 가능한 변경은 자동 병합하고, 자동으로 해결할 수 없는 부분만 충돌로 남깁니다. 모든 충돌을 해결해 주는 도구는 아니지만, 일반 텍스트 merge보다 Scene/Prefab 충돌을 줄이는 데 도움이 됩니다.

방법으로는 CLI에서 git mergetool로 사용하는 방법과, TortoiseGit 같은 외부 Git 클라이언트의 merge tool로 연결하는 방법이 있습니다.
CLI
.gitconfig에 UnityYAMLMerge를 mergetool로 등록합니다. Windows라면 보통 C:/Users/<유저이름>/.gitconfig에 설정합니다.
UnityYAMLMerge의 기본 설치 경로는 Unity 버전과 설치 방식에 따라 다릅니다. Unity Hub를 사용한다면 대략 아래와 같은 위치입니다.
C:/Program Files/Unity/Hub/Editor/<Unity 버전>/Editor/Data/Tools/UnityYAMLMerge.exe .gitconfig에는 다음처럼 추가합니다.
[merge]
tool = unityyamlmerge
[mergetool "unityyamlmerge"]
trustExitCode = false
cmd = 'C:/Program Files/Unity/Hub/Editor/<Unity 버전>/Editor/Data/Tools/UnityYAMLMerge.exe' merge -p "$BASE" "$REMOTE" "$LOCAL" "$MERGED" 이후 충돌이 발생하면 repository로 이동한 뒤 다음 명령어를 실행합니다.
git mergetool UnityYAMLMerge가 자동으로 해결할 수 있는 부분은 병합하고, 해결할 수 없는 충돌은 fallback merge tool이나 충돌 마커로 남깁니다.
TortoiseGit
TortoiseGit에서는 확장자별 merge tool을 설정할 수 있습니다.
Settings > Diff Viewer > Merge Tool > Advanced 여기서 .unity 확장자에 대해 External Program을 다음처럼 설정합니다.
"C:/Program Files/Unity/Hub/Editor/<Unity 버전>/Editor/Data/Tools/UnityYAMLMerge.exe" merge -p %base %theirs %mine %merged .prefab 확장자도 같은 방식으로 추가합니다.
UnityYAMLMerge로 실패시 다시 TortoiseGit Merge창이 열리도록 수정
UnityYAMLMerge가 자동 병합에 실패했을 때 TortoiseGit Merge 창을 열고 싶다면 Unity 설치 폴더의 mergespecfile.txt를 수정합니다.
파일은 UnityYAMLMerge와 같은 Tools 폴더에 있습니다.
C:/Program Files/Unity/Hub/Editor/<Unity 버전>/Editor/Data/Tools/mergespecfile.txt 아래처럼 .unity, .prefab 파일의 fallback merge tool을 TortoiseGitMerge로 지정합니다.
unity use "C:/Program Files/TortoiseGit/bin/TortoiseGitMerge.exe" /base:"%b" /mine:"%l" /theirs:"%r" /merged:"%d"
prefab use "C:/Program Files/TortoiseGit/bin/TortoiseGitMerge.exe" /base:"%b" /mine:"%l" /theirs:"%r" /merged:"%d" 설정 후 충돌 파일을 해결할 때 UnityYAMLMerge가 자동으로 병합할 수 있으면 CMD 창이 한 번 나타났다 바로 사라집니다.. 해결하지 못한 충돌이 있으면 TortoiseGitMerge가 열리고, 이때 남은 부분만 직접 해결하면 됩니다.

그래도 병합 후에는 Scene이나 Prefab 파일을 코드 에디터로 한 번 확인하고, Unity Editor에서 해당 Scene을 열어 에러가 없는지 확인하는 편이 좋습니다.