Version: 2018.2
Unity에서 외부 버전 관리 시스템 사용
에디터 문제 해결

스마트 병합

Unity는 씬과 프리팹 파일을 구문상 올바르게 병합할 수 있는 UnityYAMLMerge라는 툴을 내장하고 있습니다. 툴은 커맨드 라인에서 접근이 가능하며 타사 버전 관리 소프트웨어에서도 사용할 수 있습니다.

Unity에서 스마트 병합 설정

Editor Settings(메뉴: Edit > Project Settings > Editor)에는 타사의 버전 관리 툴(예: Perforce 또는 PlasticSCM)을 선택할 수 있는 옵션이 있습니다. 툴 중 하나가 활성화되면 Version Control 제목 아래에 Smart Merge 메뉴가 나타납니다. 메뉴에는 네 가지 옵션이 있습니다.

  • Off: 스마트 병합 없이 환경 설정에서 설정된 디폴트 병합 툴만을 사용합니다.
  • Premerge: 스마트 병합을 사용하며 클린 병합을 허용합니다. 언클린 병합은 파일의 base, mine, theirs 버전의 사전 병합 버전을 생성합니다. 그 후 디폴트 병합 툴과 함께 사용합니다.
  • Ask: 스마트 병합을 사용하지만 충돌이 발생하면 사용자가 처리할 수 있도록 다이얼로그를 보여 줍니다(이 옵션이 디폴트 설정입니다).

타사 툴과 함께 사용하도록 UnityYAMLMerge 설정

UnityYAMLMerge 툴은 Unity 에디터에 내장되어 있습니다. Unity가 표준 위치에 설치되어 있을 경우 UnityYAMLMerge의 경로는 다음과 같습니다.

C:\\Program Files\\Unity\\Editor\\Data\\Tools\\UnityYAMLMerge.exe

또는

C:\\Program Files (x86)\\Unity\\Editor\\Data\\Tools\\UnityYAMLMerge.exe

Windows에서는 위와 같으며

/Applications/Unity/Unity.app/Contents/Tools/UnityYAMLMerge

Mac OSX에서는 위와 같습니다(폴더에 접근하려면 파인더(Finder)에서 패키지 콘텐츠 보기 커맨드를 사용해야 합니다).

UnityYAMLMerge에는 디폴트 폴백(fallback) 파일이 내장되어 있습니다(mergespecfile.txt라는 파일로 마찬가지로 Tools 폴더에 있습니다). 이 파일은 미해결 충돌 또는 알려지지 않은 파일을 어떻게 처리해야 할지 지정합니다. 또한 이를 통해 자동으로 파일 확장자에 따라 버전 관리 시스템(예: git)에 대한 병합 툴을 선택하지 않는 경우에 주 병합 툴로 사용할 수 있습니다. 가장 일반적인 툴은 mergespecfile.txt에 이미 기본적으로 나열되어 있지만 파일을 편집하여 새 툴을 추가하거나 옵션을 변경할 수 있습니다.

UnityYAMLMerge는 스탠드얼론 툴로써 커맨드 라인에서 실행할 수 있습니다(인수 없이 실행하면 전체 사용법을 볼 수 있습니다). 일반 버전 관리 시스템용 셋업 방법은 아래와 같습니다.

P4V

  • 환경 설정 > 병합으로 이동합니다.
  • 기타 애플리케이션 을 선택합니다.
  • 추가 버튼을 클릭합니다.
  • 확장자 필드에 .unity를 입력합니다.
  • 애플리케이션 필드에 UnityYAMLMerge 툴의 경로를 입력합니다(위 참조).
  • 인수 필드에 merge -p %b %1 %2 %r을 입력합니다.
  • 저장을 클릭합니다.

그런 다음 같은 절차에 따라 .prefab 확장자를 추가합니다.

Git

.git 또는 .gitconfig 파일에 다음 텍스트를 추가해야 합니다.

    [merge]
        tool = unityyamlmerge

        [mergetool "unityyamlmerge"]
        trustExitCode = false
        cmd = '<path to UnityYAMLMerge>' merge -p "$BASE" "$REMOTE" "$LOCAL" "$MERGED"

Mercurial

.hgrc 파일에 다음 텍스트를 추가해야 합니다.

    [merge-patterns]
        **.unity = unityyamlmerge
        **.prefab = unityyamlmerge

        [merge-tools]
        unityyamlmerge.executable = <path to UnityYAMLMerge>
        unityyamlmerge.args = merge -p --force $base $other $local $output
        unityyamlmerge.checkprompt = True
        unityyamlmerge.premerge = False
        unityyamlmerge.binary = False

SVN

~/.subversion/config 파일에 다음을 추가해야 합니다.

    [helpers]
        merge-tool-cmd = <path to UnityYAMLMerge>

TortoiseGit

  • 환경 설정 > Diff 뷰어 > 병합 툴로 이동한 후 고급 버튼을 클릭합니다.
  • 팝업에서 확장자 필드에 .unity를 입력합니다.
  • 외부 프로그램 필드에 다음을 입력합니다.
    <path to UnityYAMLMerge> merge -p %base %theirs %mine %merged

그런 다음 같은 절차에 따라 .prefab 확장자를 추가합니다.

PlasticSCM

  • 환경 설정 > 병합툴로 이동한 후 추가 버튼을 클릭합니다.
  • 외부 병합 툴을 선택합니다.
  • 다음 패턴과 매치되는 파일 사용 을 선택합니다.
  • .unity 확장자를 추가합니다.
  • 다음 커맨드를 입력합니다.
    <path to UnityYAMLMerge> merge -p "@basefile" "@sourcefile"  "@destinationfile" "@output"

그런 다음 같은 절차에 따라 .prefab 확장자를 추가합니다.

SourceTree

  • 툴 > 옵션 > Diff로 이동합니다.
  • 병합 툴 드롭다운 메뉴에서 커스텀 을 선택합니다.
  • 병합 커맨드 텍스트 필드에 UnityYAMLMerge의 경로를 입력합니다.
  • 인수 텍스트 필드에 merge -p $BASE $REMOTE $LOCAL $MERGED을 입력합니다.
Unity에서 외부 버전 관리 시스템 사용
에디터 문제 해결