게임잼 기간 중 Unity 씬 파일을 병합하는 과정에서 머지 충돌 문제가 발생했다.
Unity에서 씬을 열려고 하자 아래와 같은 오류가 출력되었다.
The file '씬 경로' seems to have merge conflicts. Please open it in a text editor and fix the merge.
처음 보는 오류였고, 씬 파일이 열리지 않아 꽤 당황스러웠다.
충돌이 발생한 씬 파일을 텍스트 에디터로 열어보면 다음과 같은 충돌 구간 표시가 나타난다.
<<<<<<< HEAD
현재 브랜치의 내용
=======
병합하려는 브랜치의 내용
>>>>>>> incoming
원하는 오브젝트나 데이터를 살리려면 해당 구간을 직접 확인한 뒤, 필요한 부분만 남기고 나머지는 지워야 한다.
하지만 Unity 씬 파일은 YAML 형식으로 구성되어 있어 내용이 길고 복잡하다.
특히 충돌 구간이 많을 경우, 수작업으로 하나씩 확인하고 수정하는 과정이 매우 번거로웠다.
작은 실수 하나만으로도 씬 파일이 깨지거나, Unity에서 정상적으로 열리지 않을 위험이 있었다.
문제 해결을 위해 만든 GUI 충돌 해결 도구
이 문제를 조금이라도 편하게 해결하기 위해 Python Tkinter를 이용한 간단한 GUI 충돌 해결 도구를 제작했다.
도구 다운로드 및 사용법 보기
https://drive.google.com/file/d/1bLDuoQ_FJ-jn3e6ftAqql4FZkgvDydV6/view?usp=sharing
이 도구는 충돌이 발생한 파일을 불러온 뒤, 각 충돌 블록을 별도로 보여준다.
사용자는 각 충돌 구간마다 다음 세 가지 방식 중 하나를 선택할 수 있다.
- HEAD 버전 유지
- INCOMING 버전 유지
- 두 버전 모두 병합
텍스트를 직접 수정하지 않아도 라디오 버튼을 클릭하는 방식으로 충돌 해결 방법을 선택할 수 있다.
이후 선택한 방식에 따라 충돌 표시가 제거된 결과물을 저장할 수 있다.

프로그램을 실행한 뒤 충돌이 발생한 씬 파일을 선택하면 위와 같은 창이 표시된다.
각 충돌 구간에서 HEAD 버전을 살릴지, INCOMING 버전을 살릴지 선택할 수 있다.
두 내용을 모두 남기고 싶다면 BOTH 옵션을 선택하면 된다.
모든 충돌 구간에 대해 선택을 완료한 뒤, 선택한 방식대로 저장하면 충돌 표시가 제거된 씬 파일이 저장된다.
UnityYAMLMerge와의 차이점
UnityYAMLMerge는 Unity에서 제공하는 공식 자동 병합 도구이다.
씬 파일의 YAML 구조를 분석하여 자동으로 병합할 수 있는 부분을 처리해준다.
다만 모든 충돌을 완벽하게 해결해주는 것은 아니기 때문에, 자동 병합이 어려운 구간은 사용자가 직접 확인해야 한다.
이 도구는 UnityYAMLMerge를 대체하기 위한 도구라기보다는, 자동 병합 이후 남은 충돌을 사용자가 더 쉽게 수동으로 해결할 수 있도록 만든 보조 도구이다.
필요하다면 UnityYAMLMerge로 먼저 자동 병합을 시도한 뒤, 해결되지 않은 충돌 구간만 이 도구를 이용해 정리하는 방식으로 사용할 수 있다.