UnityYamlMergeの設定
導入
- UnityYamlMergeとは
- Unity5以降のバージョンではシーン(unity)ファイルやプレハブ(prefab)ファイルの構造が整理され、マージされやすくなった。
しかし、それでもコンフリクトが発生した場合にコンフリクトを解消しやすくしてくれるツールとして UnityYamlMerge がある。
- Unity5以降のバージョンではシーン(unity)ファイルやプレハブ(prefab)ファイルの構造が整理され、マージされやすくなった。
- 詳しくは以下のリンクを参照のこと
設定方法
-
以下のページなどを参考にしつつ各種VCSツールに設定する。
- Unity - Manual: Smart Merge
-
gitの場合は .git/config や ${HOME}/.gitconfig に以下の設定をする。
(UnityYAMLMergeへのパスは適時設定してください)[merge] tool = unityyamlmerge [mergetool "unityyamlmerge"] trustExitCode = false cmd = "/Applications/Unity/Unity.app/Contents/Tools/UnityYAMLMerge" merge -p "$BASE" "$REMOTE" "$LOCAL" "$MERGED"
-
マージしきれなかった場合のfallbackツールを設定する。
- レポジトリルートディレクトリに "auto" という名前のファイルを配置
- UnityYAMLMergeと同じディレクトリにある
mergespecfile.txt
というファイル に設定例が記載されています。 - 行頭の
*
はファイルタイプ指定(未検証)なので省略不可 -
UnityYamlMergeのオプションの--fallbackで指定することも可能?(未調査)
-
e.g.
echo '* use "/Applications/p4merge.app/Contents/MacOS/p4merge" "%b" "%l" "%r" "%d"' > auto
置き換え前のマーカー 内容 意訳 %l is replaced with the path of you local version ローカルバージョン(--ours) %r is replaced with the path of the incoming remote version マージ対象のバージョン(--theirs) %b is replaced with the common base version マージ対象のベースバージョン %d is replaced with a path where the result should be written to コンフリクト発生中のファイル(?) 編集対象
-
- レポジトリルートディレクトリに "auto" という名前のファイルを配置
使用方法
- マージ作業などでコンフリクトを発生させます。
both modified: Assets/TestScene.unity
- コンフリクト解消のためにUnityYAMLMergeを起動させます。
git mergetool
- コンフリクトが解消できた場合は以下の表示が出るので、そのままyを押下します。
Normal merge conflict for 'Assets/TestScene.unity':
{local}: modified file
{remote}: modified file
Conflicts:
Conflict handling:
Assets/cube.unity seems unchanged.
Was the merge successful? [y/n]
- コンフリクトを解消できなかった場合は、autoファイルで指定されているマージツールが起動するのでマージを解消します。
- この際は上記の[y/n]の確認は表示されません。
- ただし、マージツールがエラーコードで終了した場合は確認されます。
vimdiffの場合の設定(書きかけ)
- コンフリクト解消が難しい場合
- :cq でエラーコード終了させましょう。
- :q でそのまま終了してしまうと、マージ成功として処理されてしまいます。
- autoの内容
- 編集対象のファイルが空のままで表示される
* use "/usr/local/bin/vimdiff" -c "wincmd J" "%d" "%l" "%b" "%r"
- 編集対象のファイルが空のままで表示される
- 参考