Skip to main content
マージに競合がある場合、Diversion は競合している各ファイルに対して、選択したマージツールを実行できます。ツールがファイルの 2 つのバージョンをマージし、Diversion がその結果をマージに保存します。 特別なマージツールが必要なファイルに使用してください。例:
  • Unity のシーンとプレハブは、UnityYAMLMerge (Unity Smart Merge) で
  • JSON、YAML、ソースコードは、mergiraf のような構文を理解するツールで
  • 手動でマージしたい任意のファイルは、KDiff3 や Meld のようなビジュアルツールで

クイックスタート

  1. マージツールを追加します。コンピューターごとに 1 回だけ必要です。この例は JSON ファイルをマージします:
  2. 自分のツールでマージします:
  3. Diversion はまずサーバー上でマージできるものをマージします。残った競合ごとに、ファイルにマッチするツールを実行します。最後まで解決されなかった競合は、Diversion アプリで解決してください。
Unity やその他のツールについては、例 を参照してください。

仕組み

  1. merge-tool の競合解決を指定して、マージ、更新、またはリバートを開始します。
  2. Diversion はまずサーバー上でマージできるものをマージします。テキストファイルの異なる部分を両側が変更した場合、Diversion が自動的にマージするため、ツールは実行されません。
  3. 残った競合ごとに、Diversion はファイルパスにパターンがマッチする最初のツールを見つけます。ファイルの各バージョンを一時ファイルにダウンロードし、ツールを実行します。
  4. ツールがすべての競合を解決すると、Diversion はマージを完了してコミットを作成します。
  5. 一部の競合が解決されなかった場合、マージは開いたままになります。残りは Diversion アプリで解決します。ツールが解決した競合は、解決済みのまま保持されます。
マージツールはあなたのコンピューター上で実行されます。ツールの設定はリポジトリではなく、このコンピューターのあなたのユーザーに保存されるため、チームメンバーはそれぞれ自分のツールをセットアップします。

マージツールをセットアップする

1

ツールをインストールする

マージツールをインストールし、そのプログラムへのフルパスを確認します。プログラムが PATH 上にある場合は、プログラム名だけで十分です。
2

ツールを Diversion に追加する

どのファイルをそのツールで処理し、どう実行するかを 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 の順序で受け取ります。これは他の多くのツールとは異なります。
Windows では、この例を Command Prompt で実行してください。PowerShell はバージョンによって引数内の引用符の扱いが異なるため、引用符で囲んだプログラムパスが壊れることがあります。

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 を追加します:
ツールが 1 つもセットアップされていない場合、コマンドはマージを開始する前に停止します。 ツールは競合を 1 つずつ処理します。その後、CLI はファイルごとの結果を出力します:
Diversion は、すべての競合が解決されたときにのみマージを完了します。いずれかの競合が Skipped または Failed になった場合、マージは開いたままになり、コマンドはゼロ以外の終了コードで終了するため、スクリプトから検知できます。

マージツールを管理する

すでに存在する名前でツールを追加すると、Diversion はそのツールを置き換え、リスト内の位置を保持します。 Diversion はツールを ~/.diversion/merge_tools.json (Windows では %USERPROFILE%\.diversion\merge_tools.json) に保存します。ファイルを直接編集する代わりに、dv merge-tool で変更してください。 すべてのオプションは dv merge-tool を参照してください。

トラブルシューティング

関連