SourceTree에서 Unity 씬, 프리팹 병합을 위한 UnityYAMLMerge 설정

UnityYAMLMerge로 유니티 씬을 편하게 머지하기

2022-02-13에 씀

아래 내용은 Windows 기준으로 작성되었습니다.

사용되는 툴

기본 툴 설정

Meld 설치 및 fallback 설정

Meld 설치

https://meldmerge.org/ 에서 Meld 설치 파일을 다운받고 설치한다. 설치 경로는 C:\Program Files\Meld 으로 지정한다.

  1. 관리자 권한으로 cmd 실행
  2. 설치 파일 경로로 이동하여 설치 파일 직접 실행

UnityYAMLMerge fallback 파일 수정 - mergespecfile.txt

파일 경로: C:\Program Files\Unity\Editor\Data\Tools\mergespecfile.txt

위 경로의 파일을 열어 아래와 같이 수정한다. 내용 변경에 관리자 권한이 필요할 수 있다. 이 경우 메모장을 관리자 권한으로 실행한 후 해당 경로의 파일을 열어 해결할 수 있다.

15~21줄이 해당 캡쳐처럼 변경되어야 UnityYAMLMerge가 처리하지 못하는 부분이 있을 때 에러가 발생하지 않고 외부 툴을 실행하여 충돌을 직접 처리하게 해준다. 여기에서는 Meld를 사용한다.

파일을 위 캡쳐와 같이 수정하기 위해 15~21 줄을 아래 내용으로 수정한다.

before

1unity use "%programs%\YouFallbackMergeToolForScenesHere.exe" "%l" "%r" "%b" "%d"
2prefab use "%programs%\YouFallbackMergeToolForPrefabsHere.exe" "%l" "%r" "%b" "%d"
3
4#
5# Default fallbacks for unknown files. First tool found is used.
6#

after

1unity use "%programs%\Meld\meld.exe" "%b" "%r" "%l" -o "%d" --auto-merge
2prefab use "%programs%\Meld\meld.exe" "%b" "%r" "%l" -o "%d" --auto-merge
3
4#
5# Default fallbacks for unknown files. First tool found is used.
6#
7
8* use "%programs%\Meld\meld.exe" "%b" "%r" "%l" -o "%d" --auto-merge

SourceTree 병합 도구 설정

  1. SourceTree→도구→옵션→비교 탭으로 이동
  2. 병합 도구의 드롭다운에서 [커스텀] 선택
  3. 병합 명령어에 입력: C:\Program Files\Unity\Editor\Data\Tools\UnityYAMLMerge.exe
  4. 변수에 입력: merge -p $BASE $REMOTE $LOCAL $MERGED
  5. [확인] 클릭

상단 메뉴에서 도구→옵션→비교

모든 설정이 완료되었으므로, 이후 브랜치 병합 도중 씬이나 프리팹 등에서 충돌이 발생할 경우 충돌이 발생한 파일을 우클릭 → 충돌 해결 → 외부 병합 툴 시작을 선택하여 UnityYAMLMerge를 실행해 충돌을 해결할 수 있다.

충돌이 발생한 씬에서 오른쪽 클릭 후 [외부 병합 툴 시작]을 누르면 UnityYAMLMerge가 실행되며 자동으로 씬을 병합해 준다


병합 예시 프로젝트

기본적인 프로젝트를 구성했다.

현재 브랜치는 master 브랜치 뿐이다.

master 브랜치에서 간단한 씬을 구성했다.

Master 브랜치에서 구성한 간단한 씬의 모습

충돌 환경 생성

new-feature라는 새로운 브랜치를 생성했다.

충돌 상황을 만들기 위하여, 각 브랜치의 Main 씬 내의 오브젝트를 다음과 같이 수정했다.

이를 통해 테스트하고자 하는 부분은 다음과 같다.

  1. new-feature 브랜치 새로 만든 new-feature 브랜치에서 수정한 Main 씬의 모습
  2. master 브랜치 기존 master 브랜치에서 수정한 Main 씬의 모습

두 브랜치 각각에서 작업의 내용을 커밋했다.

SourceTree에서 외부 병합 툴 사용

둘을 병합하려고 하면 충돌 병합 메시지가 표시된다.

SourceTree는 유니티 씬 파일의 충돌을 자동으로 병합해 주지 못하기 때문에 발생하는 에러

커밋을 확인해 보면 스테이지에 병합이 실패한 Main 씬 파일이 올라와 있는 것을 확인할 수 있다. 파일 오른쪽 클릭 → 충돌 해결 → 외부 병합 툴 시작을 누르면 UnityYAMLMerge가 실행된다.

충돌이 발생한 씬에서 오른쪽 클릭 후 [외부 병합 툴 시작]을 누르면 UnityYAMLMerge가 실행되며 자동으로 씬을 병합해 준다

앞에서 Meld 설정을 하지 않았을 때, UnityYAMLMerge가 해결할 수 없는 충돌이 있다면 그 충돌을 해결하기 위한 외부 툴을 찾지 못하여 Couldn't locate merge tool to handle extension tmp in \my\path\to\mergespecfile.txt 에러가 발생한다. 해당 에러를 해결하기 위하여 앞에서 fallback file에 Meld 툴의 경로를 설정해 주었다.

Meld에서 충돌 병합하기

UnityYAMLMerge가 처리하지 못한 충돌은 Meld에서 직접 처리해야 한다

텍스트의 내용을 변경한 것을 UnityYAMLMerge 내부에서 해결하지 못했다. 변경된 두 텍스트 중에서 선택할 것을 고른 후 Save하고 창을 닫으면 충돌을 직접 처리할 수 있다. 충돌이 잘 처리되었다면 유니티로 이동해 해당 씬을 reload 했을 때 충돌 관련 에러가 발생하지 않고 잘 실행되어야 한다.

충돌이 잘 처리되었다

병합이 잘 처리되어 master 브랜치로 커밋된 모습

병합 결과

충돌 처리 및 병합 이후 master 브랜치의 씬 모습

프로필 사진

조예진

이전 포스트
CORS
다음 포스트
JS07-2 this