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

クイックスタート

ツールはコンピューターごとに 1 回セットアップし、その後は各マージで使用します。各ステップは、デスクトップアプリまたは CLI で行えます。
1

マージツールをコンピューターにインストールする

たとえば、JSON ファイルをマージするには mergiraf をインストールします。Unity やその他のツールについては、例 を参照してください。
2

ツールを Diversion に追加する

どのファイルをそのツールで処理し、どう実行するかを Diversion に指定します。
  • デスクトップアプリ: Settings > Merge tools を開き、次の値でツールを追加します。デスクトップアプリでツールをセットアップする を参照してください。
    • Name: mergiraf
    • File pattern: \.json$
    • Command: mergiraf merge $ANCESTOR $CURRENT $INCOMING -o $RESULT
  • CLI: dv merge-tool add を実行します:
どちらも同じツールリストに保存されるため、一方で追加したツールはもう一方でも使えます。
3

マージを開始する

  • デスクトップアプリ: 通常どおりマージを開始します。競合がある場合は、View conflicts をクリックしてマージ画面を開きます。
  • CLI: merge-tool の競合解決を追加します:
4

ツールで競合を解決する

Diversion はまずサーバー上でマージできるものをマージします。ツールは残った競合に対してのみ実行されます。
  • デスクトップアプリ: 競合しているファイルを選択し、Resolve with <tool> をクリックします。ツールは 1 ファイルずつ実行します。Diversion デスクトップアプリから を参照してください。
  • CLI: Diversion は各競合に対して、マッチするツールを順番に実行します。最後まで解決されなかった競合は、Diversion アプリで解決してください。CLI から を参照してください。

仕組み

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

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

1

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

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

ツールを Diversion に追加する

どのファイルをそのツールで処理し、どう実行するかを Diversion に指定します:
すぐに使えるコマンドは 例 を参照してください。
3

セットアップを確認する

Diversion がマッチングする順序で、ツールを一覧表示します:

デスクトップアプリでツールをセットアップする

デスクトップアプリで Settings > Merge tools を開きます。このページには、dv merge-tool と同じツールが、Diversion がマッチングする順序で表示されます。このページでの変更は、CLI が使用するツールにも反映されます。

編集中の Settings > Merge tools。例のツールを表示

1

編集を開始する

テーブルヘッダーにある編集 (鉛筆) ボタンをクリックします。ツールがまだない場合は、Add merge tool をクリックします。
2

ツールを追加する

+ をクリックし、新しい行に入力します:
  • Name: 他のツールと重複しない名前。
  • File pattern: ファイルパスの正規表現。--pattern と同じです。ファイルパターン を参照してください。
  • Command: --cmd と同じです。$RESULT を含める必要があります。プログラムを選ぶには、フォルダーボタンをクリックします。アプリはプログラムのパスを二重引用符で囲んで、コマンドの先頭に入れます。
  • Result check: Tool’s exit code (デフォルト)、または --no-trust-exit-code を付けて追加するようなツールの場合は Diversion checks the result。終了コードとビジュアルツール を参照してください。
3

順序を設定する

行をドラッグして順序を変更します。Diversion は Priority が 1 のツールを最初に確認します。
4

保存する

Save changes をクリックし、ダイアログで Save をクリックします。
セットアップを確認するには、Which tool runs for a file? にファイルパスを入力します (例: Assets/Scenes/Main.unity)。このページには、そのファイルに対して実行されるツール、または No tool matches this file が表示されます。 設定ページのルール:
  • コマンドは外側の引用符なしで入力します。CLI で引用符が必要なのはシェルのためだけです。例 のコマンドを使うには、--cmd の値を外側の引用符なしでコピーします。Windows の例では、各 \" も " に変更してください。
  • ツールを削除するには、その削除ボタンをクリックします。保存するまでは、元に戻すボタンをクリックしてツールを残せます。
  • 行にエラーがある間 (たとえば $RESULT のないコマンド)、Save changes は無効のままです。
  • 編集中に誰かが dv merge-tool でツールを変更すると、保存は失敗します。Cancel をクリックしてから、変更をやり直してください。

コマンドプレースホルダー

--cmd では、ファイルパスとして以下のプレースホルダーを使用します。Diversion はツールを実行する前に、これらを一時ファイルに置き換えます。 コマンドのルール:
  • --cmd には $RESULT を含める必要があります。
  • コマンドはシェルを介さず直接実行されます。パイプ (|)、リダイレクト (>)、環境変数は機能しません。必要な場合は、手順をスクリプトにまとめ、そのスクリプトをコマンドに設定してください。
  • スペースを含むプログラムパスは二重引用符で囲んでください。
  • Mac と Linux では、--cmd の値全体を単一引用符で囲んでください。そうしないと、Diversion に届く前にシェルが $ANCESTOR などのプレースホルダーを置き換えてしまいます。
一時ファイルは元のファイル拡張子を保持します (例: local.prefab)。これは、UnityYAMLMerge や mergiraf のように、拡張子からマージ方法を決めるツールで重要です。

ファイルパターン

--pattern は正規表現です。Diversion はリポジトリ内のファイルパスに対してマッチングします。 複数のツールがファイルにマッチする場合、リストの最初のツールが優先されます。dv merge-tool add は新しいツールをリストの末尾に追加します。順序は dv merge-tool で確認してください。デスクトップアプリでは、Settings > Merge tools で行をドラッグして順序を変更します。 どのツールにもマッチしないファイルは、Diversion アプリで解決するために残されます。

終了コードとビジュアルツール

デフォルトでは、git mergetool と同じように、ツールの終了コードが結果を決めます: 一部のビジュアルツールは、保存せずに閉じても 0 で終了します。そのようなツールには --no-trust-exit-code を追加してください。デスクトップアプリでは、Result check を Diversion checks the result に設定します。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 デスクトップアプリから

デスクトップアプリでは、マージ画面から、競合しているファイルに対して 1 つずつマージツールを実行します。 アプリは、dv merge-tool add または Settings > Merge tools でセットアップしたツールを使用します (マージツールをセットアップする を参照)。
マージツールはあなたのコンピューター上で実行されるため、この機能はデスクトップアプリでのみ動作します。ブラウザーでは、マージ画面にマージツールのボタンは表示されません。
1

マージ画面を開く

デスクトップアプリで、競合のあるマージを開きます。たとえば、マージを開始し、アプリが競合を報告したら View conflicts をクリックします。マージ画面に、競合しているファイルが一覧表示されます。
2

ファイルを選択する

マージツールのいずれかがファイルにマッチする場合、ファイルヘッダーに Resolve with <tool> が表示されます。マッチするツールがない場合、ボタンは表示されないため、通常どおりマージ画面でファイルを解決します。
3

ツールを実行する

Resolve with <tool> をクリックします。Diversion はファイルの各バージョンをダウンロードし、ツールを実行します。ツールの実行中、ヘッダーには Waiting for <tool>… と Cancel ボタンが表示されます。
4

ツールでマージする

ツールでファイルをマージし、結果を保存してツールを閉じます。ツールが競合を解決すると、アプリはファイルを解決済みとしてマークし、マージ結果を表示します。
5

マージを完了する

他のファイルについても繰り返します。すべての競合が解決されたら、Complete merge をクリックします。
デスクトップアプリでのルール:
  • 一度に実行できるツールは 1 つだけです。あるファイルでツールが開いている間、他のファイルのボタンは無効になります。
  • Complete merge は、ツールが終了するまで待機します。
  • マージ画面でファイルをすでに変更している場合、ツールの結果で置き換える前に Diversion が確認します。続行するには Replace with <tool> をクリックします。
  • 終了コードを信頼しないツール (--no-trust-exit-code、または Diversion checks the result) で、マージが成功したかどうかを Diversion が判断できない場合、アプリは Did the merge work? と確認します。結果を保存するには Yes, it merged をクリックします。競合を未解決のままにするには、No をクリックするかダイアログを閉じます。10 分以内に回答しない場合、回答は No になります。
  • ツールが競合を未解決のまま残した場合や失敗した場合、ヘッダーに理由とボタンが再び表示されます。ツールを再実行するか、マージ画面でファイルを解決してください。
  • ツールの結果を取り消すには、ファイルヘッダーの Revert to conflict をクリックします。ツールを実行するボタンが再び表示されます。
  • マージ画面は、開いたときにツールを読み込みます。マージ画面を開いている間にツールを追加した場合は、そのツールを使うためにマージを開き直してください。

マージツールを管理する

すでに存在する名前でツールを追加すると、Diversion はそのツールを置き換え、リスト内の位置を保持します。 デスクトップアプリでは、Settings > Merge tools で同じ操作を行えます。デスクトップアプリでツールをセットアップする を参照してください。 Diversion はツールを ~/.diversion/merge_tools.json (Windows では %USERPROFILE%\.diversion\merge_tools.json) に保存します。ファイルを直接編集する代わりに、dv merge-tool または設定ページで変更してください。 すべてのオプションは dv merge-tool を参照してください。

トラブルシューティング