Unity で外部のバージョン管理システムを使用
エディターのトラブルシューティング

Smart Merge

Unity には意味的に正しい方法でシーンやプレハブのファイルをマージすることができる UnityYAMLMerge というツールが組み込まれています。このツールは、コマンドラインからアクセスでき、サードパーティのバージョン管理ソフトウェアも利用可能です。

Unity で Smart Merging の設定

Editor Settings (menu: Edit > Project Settings > Editor) で、サードパーティ製のバージョン管理ツールを選択するオプションがあります(例えば、PERFORCE や PlasticSCM )。これらのツールのいずれかを有効にしたとき、Version Control の見出しの下に Smart Merge メニューが表示されます。メニューには4つのオプションがあります。

  • Off: スマートマージのない環境設定でデフォルトのマージツールだけを使用します。
  • Premerge: スマートマージを有効にし、clean merges をアクセプトします。Unclean merges は、それらのものとファイル自身をベースに premerged バージョンを作成します。それから、デフォルトのマージツールでこれらを使用します。
  • Ask: スマートマージを有効にしても、コンフリクトが発生した場合、ユーザに、それを解決させるためのダイアログを表示します(これはデフォルトの設定です)。

サードパーティのツールで使用する UnityYAMLMerge の設定

UnityYAMLMerge ツールは、Unity editor が同梱されています。 Unity が標準の場所にインストールされていると仮定すると、UnityYAMLMerge へのパスは次のようになります。

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

or

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

…Windows 上と

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

…MacOSX 上で (このフォルダーにアクセスするには、Finder から Show Package Contents コマンドを使用します。)

UnityYAMLMerge は、それがどのように未解決のコンフリクトまたは未知のファイルを続行するかを指定するデフォルトのフォールバックファイル( Tools フォルダーでも mergespecfile.txt と呼ばれます)が同梱されています。これはまた、ファイル拡張子に基づいて自動的にマージツールを選択しない(例えば、git のような)バージョン管理システムのための主要なマージツールとしてそれを使用することができます。もっとも一般的なツールは、すでにデフォルトで mergespecfile.txt にリストされていますが、新しいツールや変更オプションを追加するために、このファイルを編集することができます。

コマンドラインからスタンドアロンツールとして UnityYAMLMerge を実行することができます(引数なしでそれを実行すると、対応するすべての手順を参照することができます)。一般的なバージョン管理システム用のセットアップ命令を以下に示します。

P4V

  • Preferences > Merge に移動します。
  • Other application を選択します。
  • Add ボタンをクリックします。
  • extension フィールドに、.unity と入力します。
  • Application フィールドに、UnityYAMLMerge ツールへのパスを入力します(上記参照)。
  • Arguments フィールドに、merge -p %b %1 %2 %r と入力します。
  • Save をクリックします。

そして、.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

  • Preferences > Diff Viewer > Merge Tool に移動し、Advanced ボタンをクリックします。
  • ポップアップした extension フィールドに、.unity と入力します。
  • External Program フィールドに次のように入力します。
    <path to UnityYAMLMerge> merge -p %base %theirs %mine %merged

そして、.prefab 拡張子を追加するには、同じ手順にしたがってください。

PlasticSCM

  • Preferences > Merge Tools に移動し、Add ボタンをクリックします。
  • External merge tool を選択します。
  • Use with files that match the following pattern を選択します。
  • .unity 拡張子を追加します。
  • 次のコマンドを入力します。
    <path to UnityYAMLMerge> merge -p "@basefile" "@sourcefile"  "@destinationfile" "@output"

そして、.prefab 拡張子を追加するには、同じ手順にしたがってください。

SourceTree

  • Tools > Options > Diff に移動します。
  • Custom in the Merge Tool のドロップダウンで Custom を選択します。
  • Merge Command テキストフ​​ィールドに UnityYAMLMerge へのパスを入力します。
  • Arguments テキストフ​​ィールドに merge -p $BASE $REMOTE $LOCAL $MERGED と入力します。
Unity で外部のバージョン管理システムを使用
エディターのトラブルシューティング