아래 내용은 Windows 기준으로 작성되었습니다.
https://meldmerge.org/ 에서 Meld 설치 파일을 다운받고 설치한다. 설치 경로는 C:\Program Files\Meld
으로 지정한다.
파일 경로: C:\Program Files\Unity\Editor\Data\Tools\mergespecfile.txt
위 경로의 파일을 열어 아래와 같이 수정한다. 내용 변경에 관리자 권한이 필요할 수 있다. 이 경우 메모장을 관리자 권한으로 실행한 후 해당 경로의 파일을 열어 해결할 수 있다.
15~21줄이 해당 캡쳐처럼 변경되어야 UnityYAMLMerge가 처리하지 못하는 부분이 있을 때 에러가 발생하지 않고 외부 툴을 실행하여 충돌을 직접 처리하게 해준다. 여기에서는 Meld를 사용한다.
파일을 위 캡쳐와 같이 수정하기 위해 15~21 줄을 아래 내용으로 수정한다.
before
unity use "%programs%\YouFallbackMergeToolForScenesHere.exe" "%l" "%r" "%b" "%d"
prefab use "%programs%\YouFallbackMergeToolForPrefabsHere.exe" "%l" "%r" "%b" "%d"
#
# Default fallbacks for unknown files. First tool found is used.
#
after
unity use "%programs%\Meld\meld.exe" "%b" "%r" "%l" -o "%d" --auto-merge
prefab use "%programs%\Meld\meld.exe" "%b" "%r" "%l" -o "%d" --auto-merge
#
# Default fallbacks for unknown files. First tool found is used.
#
* use "%programs%\Meld\meld.exe" "%b" "%r" "%l" -o "%d" --auto-merge
C:\Program Files\Unity\Editor\Data\Tools\UnityYAMLMerge.exe
merge -p $BASE $REMOTE $LOCAL $MERGED
상단 메뉴에서 도구→옵션→비교
모든 설정이 완료되었으므로, 이후 브랜치 병합 도중 씬이나 프리팹 등에서 충돌이 발생할 경우 충돌이 발생한 파일을 우클릭 → 충돌 해결 → 외부 병합 툴 시작을 선택하여 UnityYAMLMerge를 실행해 충돌을 해결할 수 있다.
충돌이 발생한 씬에서 오른쪽 클릭 후 [외부 병합 툴 시작]을 누르면 UnityYAMLMerge가 실행되며 자동으로 씬을 병합해 준다
기본적인 프로젝트를 구성했다.
현재 브랜치는 master 브랜치 뿐이다.
master 브랜치에서 간단한 씬을 구성했다.
Master 브랜치에서 구성한 간단한 씬의 모습
new-feature라는 새로운 브랜치를 생성했다.
충돌 상황을 만들기 위하여, 각 브랜치의 Main 씬 내의 오브젝트를 다음과 같이 수정했다.
이를 통해 테스트하고자 하는 부분은 다음과 같다.
두 브랜치 각각에서 작업의 내용을 커밋했다.
둘을 병합하려고 하면 충돌 병합 메시지가 표시된다.
SourceTree는 유니티 씬 파일의 충돌을 자동으로 병합해 주지 못하기 때문에 발생하는 에러
커밋을 확인해 보면 스테이지에 병합이 실패한 Main 씬 파일이 올라와 있는 것을 확인할 수 있다. 파일 오른쪽 클릭 → 충돌 해결 → 외부 병합 툴 시작을 누르면 UnityYAMLMerge가 실행된다.
충돌이 발생한 씬에서 오른쪽 클릭 후 [외부 병합 툴 시작]을 누르면 UnityYAMLMerge가 실행되며 자동으로 씬을 병합해 준다
앞에서 Meld 설정을 하지 않았을 때, UnityYAMLMerge가 해결할 수 없는 충돌이 있다면 그 충돌을 해결하기 위한 외부 툴을 찾지 못하여
Couldn't locate merge tool to handle extension tmp in \my\path\to\mergespecfile.txt
에러가 발생한다. 해당 에러를 해결하기 위하여 앞에서 fallback file에 Meld 툴의 경로를 설정해 주었다.
UnityYAMLMerge가 처리하지 못한 충돌은 Meld에서 직접 처리해야 한다
텍스트의 내용을 변경한 것을 UnityYAMLMerge 내부에서 해결하지 못했다. 변경된 두 텍스트 중에서 선택할 것을 고른 후 Save하고 창을 닫으면 충돌을 직접 처리할 수 있다. 충돌이 잘 처리되었다면 유니티로 이동해 해당 씬을 reload 했을 때 충돌 관련 에러가 발생하지 않고 잘 실행되어야 한다.
충돌이 잘 처리되었다
병합이 잘 처리되어 master 브랜치로 커밋된 모습
충돌 처리 및 병합 이후 master 브랜치의 씬 모습