ローカルのマージツールとして設定したUnityYAMLMergeでマージする
Unityプロジェクトをgitで管理したいということで色々調べていたらUnityYAMLMergeに辿り着きました。
UnityYAMLMergeはザックリ言うと同一シーンやプレハブをブランチ切って同時に編集しても、同一パラメータなどを変更してなければ上手くマージしてくれるというツールです。 設定方法をググっているとSourceTreeでのUnityYAMLMergeの設定方法はたくさん出てきたのですが、僕はSourceTreeではなくネイティブなgitでUnityYAMLMergeを使うことにしました。
メモ程度の記事ですが、何か間違えてるぞという点があればお教えください。
目次
SourceTreeを使いたくない理由
SourceTreeだとリポジトリ毎にマージツールを設定することができずグローバルな設定として扱われます(多分)。
Unityプロジェクト専用のマシンだったらそれでもいいかもしれませんが、僕はUnityプロジェクト以外にもgitで管理するものがあるのでマージツールなどはなるべくリポジトリ単位で設定したい… というわけで普通にgitでUnityYAMLMergeをローカルのマージツールとして使えるようにします。
設定方法
ローカル(リポジトリ単位)でのマージツール設定
管理したいUnityプロジェクトフォルダ直下の.git
フォルダにあるconfig
ファイルに以下を追加します。
[merge] tool = unityyamlmerge [mergetool "unityyamlmerge"] trustExitCode = false cmd = '[UnityPath]/Editor/Data/Tools/UnityYAMLMerge.exe' merge -p "$BASE" "$REMOTE" "$LOCAL" "$MERGED"
[UnityPath]の部分はUnityまでのパスを適宜入力してください。 僕の場合は以下の場所にありました*1。
C:\Program Files\Unity\Editor\Data\Tools\UnityYAMLMerge.exe
autoファイル追加
詳細は以下
おそらくコンフリクト時に使用する外部diffツールを設定するファイルだと思うのですが、イマイチわかっていません。 とりあえずいろんな記事でP4Mergeを使っているので、僕も右にならえということでP4Mergeをインストール。
そしてUnityプロジェクトフォルダ直下にauto
ファイルを作成し、以下を入力しておきます。
* use "%programs%\Perforce\p4merge.exe" "%b" "%l" "%r" "%d"
設定は以上です。
検証
テスト用のプロジェクトYAMLMergeTest
を作成してブランチを切り、わざとコンフリクトさせてみます。
コンフリクトの準備
まず、シーンにCubeを一つおいただけのプロジェクトを作りました。
次に、ここでブランチを切りtestブランチを作成し、Cylinderをシーンに追加しました。
masterブランチに移り、シーンにSphereを追加します。これでマージ時にコンフリクトするはずですね。
マージしてコンフリクトを解消する
$ git merge test
でmasterブランチとtestブランチをマージしてみましょう。
コンフリクトしました。
では$ git mergetool
コマンドでUnityYAMLMergeを起動してみます。
ちょっとここで僕は$ git mergetool -t unityyamlmerge
と入力しているのですが、$ git mergetool
で大丈夫だと思います、多分…
これで無事マージされました。
Unityプロジェクトを開いてみます。
SphereとCylinderが追加され、うまいことマージされているのがわかります。
以上で検証は終了です。UnityYAMLMergeを使えば同一シーンの編集などが一応できるみたいですね。
勘違いしていたこと
僕のgitについての知識が乏しく、マージツールというものを初めて使ったので勘違いしていたことがありました。
マージツールはコンフリクト後に初めて起動するツールらしく、$ git merge
の時点では起動しないんですね。
最初からコンフリクトが発生しないようにマージしてくれるものだと勘違いしており、「めっちゃコンフリクトしてるやん!」と勝手にキレていました。
ともあれ、多少手がかかりますがこれにて無事リポジトリ単位で設定したUnityYAMLMergeを使うことができました。
参考記事
- Unity - Manual: Smart Merge
- 公式ドキュメント
- gitのマージツールにWinMergeを使う - 桜花な日々
- マージツールのローカルでの設定方法
- 概要UnityYAMLMerge | GREE Engineers' Blog
- 【Unity】数名で一つのSceneやPrefabを編集しスマートにマージする - テラシュールブログ
*1:UnityHub使ってる場合、おそらく使うUnityバージョンによってパスが異なります