- Unity のシーンとプレハブは、UnityYAMLMerge (Unity Smart Merge) で
- JSON、YAML、ソースコードは、mergiraf のような構文を理解するツールで
- 手動でマージしたい任意のファイルは、KDiff3 や Meld のようなビジュアルツールで
クイックスタート
- マージツールを追加します。コンピューターごとに 1 回だけ必要です。この例は JSON ファイルをマージします:
- 自分のツールでマージします:
- Diversion はまずサーバー上でマージできるものをマージします。残った競合ごとに、ファイルにマッチするツールを実行します。最後まで解決されなかった競合は、Diversion アプリで解決してください。
仕組み
merge-toolの競合解決を指定して、マージ、更新、またはリバートを開始します。- Diversion はまずサーバー上でマージできるものをマージします。テキストファイルの異なる部分を両側が変更した場合、Diversion が自動的にマージするため、ツールは実行されません。
- 残った競合ごとに、Diversion はファイルパスにパターンがマッチする最初のツールを見つけます。ファイルの各バージョンを一時ファイルにダウンロードし、ツールを実行します。
- ツールがすべての競合を解決すると、Diversion はマージを完了してコミットを作成します。
- 一部の競合が解決されなかった場合、マージは開いたままになります。残りは Diversion アプリで解決します。ツールが解決した競合は、解決済みのまま保持されます。
マージツールはあなたのコンピューター上で実行されます。ツールの設定はリポジトリではなく、このコンピューターのあなたのユーザーに保存されるため、チームメンバーはそれぞれ自分のツールをセットアップします。
マージツールをセットアップする
1
ツールをインストールする
マージツールをインストールし、そのプログラムへのフルパスを確認します。プログラムが
PATH 上にある場合は、プログラム名だけで十分です。2
ツールを Diversion に追加する
3
セットアップを確認する
Diversion がマッチングする順序で、ツールを一覧表示します:
コマンドプレースホルダー
--cmd では、ファイルパスとして以下のプレースホルダーを使用します。Diversion はツールを実行する前に、これらを一時ファイルに置き換えます。
コマンドのルール:
--cmdには$RESULTを含める必要があります。- コマンドはシェルを介さず直接実行されます。パイプ (
|)、リダイレクト (>)、環境変数は機能しません。必要な場合は、手順をスクリプトにまとめ、そのスクリプトをコマンドに設定してください。 - スペースを含むプログラムパスは二重引用符で囲んでください。
- Mac と Linux では、
--cmdの値全体を単一引用符で囲んでください。そうしないと、Diversion に届く前にシェルが$ANCESTORなどのプレースホルダーを置き換えてしまいます。
local.prefab)。これは、UnityYAMLMerge や mergiraf のように、拡張子からマージ方法を決めるツールで重要です。
ファイルパターン
--pattern は正規表現です。Diversion はリポジトリ内のファイルパスに対してマッチングします。
複数のツールがファイルにマッチする場合、リストの最初のツールが優先されます。
dv merge-tool add は新しいツールをリストの末尾に追加します。順序は dv merge-tool で確認してください。
どのツールにもマッチしないファイルは、Diversion アプリで解決するために残されます。
終了コードとビジュアルツール
デフォルトでは、git mergetool と同じように、ツールの終了コードが結果を決めます:
一部のビジュアルツールは、保存せずに閉じても
0 で終了します。そのようなツールには --no-trust-exit-code を追加してください。Diversion は終了コードを無視して $RESULT を確認します:
- ツールが
$RESULTに書き込み、ファイルに競合マーカー (<<<<<<<) がなければ、競合は解決済みです。 - そうでない場合、Diversion は
Was the merge successful? [y/n]と確認します。 - CI ジョブなど、確認するターミナルがない場合、競合は未解決のままになります。
例
Unity Smart Merge (UnityYAMLMerge)
UnityYAMLMerge は Unity Editor に付属しています。Unity のシーン、プレハブ、その他の YAML アセットをマージします。テキストとして保存されたアセットでのみ機能するため、先に Asset Serialization Mode をForce Text に設定してください (Unity ベストプラクティス を参照)。
6000.0.23f1 はお使いの Unity バージョンに変更してください:
UnityYAMLMerge はファイルを base、remote、local、merged の順序で受け取ります。これは他の多くのツールとは異なります。
mergiraf (JSON、YAML、コード)
mergiraf は多くのファイルタイプの構文を理解します。1 つの JSON オブジェクトに追加された 2 つの新しいキーのように、同じ行に対する 2 つの変更をマージできます。KDiff3
KDiff3 は、マージできるものは自動でマージします。あなたの対応が必要な競合が残ったときにだけウィンドウを開きます。Meld
Meld は保存せずに閉じても0 で終了するため、--no-trust-exit-code を追加します:
マージツールで競合を解決する
CLI から
dv merge、dv update、または dv revert に --conflict_resolution merge-tool を追加します:
Diversion は、すべての競合が解決されたときにのみマージを完了します。いずれかの競合が Skipped または Failed になった場合、マージは開いたままになり、コマンドはゼロ以外の終了コードで終了するため、スクリプトから検知できます。
マージツールを管理する
~/.diversion/merge_tools.json (Windows では %USERPROFILE%\.diversion\merge_tools.json) に保存します。ファイルを直接編集する代わりに、dv merge-tool で変更してください。
すべてのオプションは dv merge-tool を参照してください。
トラブルシューティング
関連
dv merge-tool— マージツールを管理する CLI リファレンス- 競合 — 競合の種類と解決方法
- ブランチとマージ
- Unity ベストプラクティス

