Skip to main content

競合の種類

Diversion で作業していると、ワークフローを妨げるさまざまな種類の競合に遭遇することがあります。 これらの競合と解決方法を理解することは、スムーズな開発プロセスを維持するために重要です。

マージ競合

これらの競合は主に、異なるブランチからの変更が同じファイルに影響を与えるブランチマージ時に発生します。 ただし、次のようなシナリオでは、ワークスペース内でもマージ競合が発生する可能性があります:
  1. Auto-Update を有効にしていて、他のチームメンバーが同じブランチにコミットした場合。
  2. ワークスペースでブランチを切り替え、ワークスペースにコミットされていない変更が含まれていた、 またはターゲットブランチで変更をアンシェルブすることを選択した場合。
  3. 別のコミットをワークスペースにチェリーピックした場合。
マージ競合が発生すると、変更はワークスペース外のクラウドに保存され、 デスクトップアプリで確認して解決できます。 UnityYAMLMerge や KDiff3 など、自分のマージツールで解決することもできます。外部マージツール を参照してください。

同期競合

Diversion では、作業中のワークスペースはローカルとリモートの両方に保存されます。 通常、ファイルの更新はローカルワークスペースからリモートへ同期されますが、リモート ワークスペースがより新しい変更を持っており、それをローカルコピーに同期する必要がある場合もあります。 たとえば、ワークスペースで Auto-Update が有効(デフォルト)で、他のチームメンバーが同じブランチに コミットした場合に発生することがあります。もう1つの例は、別のブランチからの変更を現在のブランチにマージした場合です。 同期競合は、ローカルの変更がワークスペースのリモートミラーに同期される機会がないうちに、 リモート側でローカルで編集したのと同じファイルを変更する新しいコミットを受け取った場合に発生します。 ワークスペースの同期を一時停止していたり、しばらくオフラインだったりすると、同期競合に遭遇する可能性が高まります。 一方、ブランチで単独作業したり、Auto-Update を無効にすると、同期競合の可能性は減少します。 同期競合が発生すると、Diversion は自動的にローカル編集したファイルの .dv-conflict サフィックス付きの バックアップを作成し、元のパスを受信した内容で上書きします。これにより、作業内容が失われないようにします。 ほとんどのテキストファイルでは、その後 Diversion がバックアップを自動的にマージします。テキストバックアップの自動マージを参照してください。

.dv-conflict ファイル

これらのファイルは競合を示すためだけに作成され、リポジトリにコミットすることを意図していません。 そのため、Diversion によって追跡されず、コミットすることはできません。 ローカル競合がある場合、Diversion デスクトップアプリのワークスペースに警告が表示されます:ローカル競合の警告 ワークスペースの Flat Changes タブでバックアップされた競合ファイルの一覧を確認できます:Flat Changes 選択 競合するファイルには特別なアイコンと色が付きます:競合ファイル項目 上記の例では、ファイル syncing.mdx(受信した変更を含む)が、バックアップファイル syncing.dv-conflict.mdx(同期されていないユーザーのローカル変更を含む)と競合しています。 .dv-conflict ファイルの内容はアプリで表示可能ですが、履歴はありません。 デスクトップアプリでは、バックアップのあるすべてのファイルが Conflicts ページの Local backups に、各ファイルのバックアップ数とともに一覧表示されます。 左メニューの Conflicts の件数には、これらのファイルも含まれます。 .dv-conflict ファイルは安全に無視でき、競合の元となったファイルを含む他のファイルは通常どおり 作業とコミットを続けることができます。ただし、差分がマージしにくくなる前に、 できるだけ早く競合を解決することをお勧めします。 Diversion がバックアップを自動的に削除するのは、マージのためにバックアップをサーバーに送信した後だけです (下記参照)。 それ以外の場合は、競合を解決したら .dv-conflict ファイルを自分で削除してください。 Diversion デスクトップアプリで1つずつ削除するか、ファイルエクスプローラーから一括で削除できます。 コンテキストメニューの Show in Explorer/Finder を使用すると、ファイルの場所をすばやく確認して削除できます。

テキストバックアップの自動マージ

同期競合でテキストファイルがバックアップされると、Diversion はバックアップをサーバーに送信し、 編集元のバージョンを共通のベースとして、受信した変更とマージします:
  • 自分の編集と受信した変更が異なる行に対するものであれば、ファイルには両方が反映され、バックアップは削除されます。 マージされたファイルは、他の同期された変更と同じようにワークスペースに届きます。
  • 同じ行を変更している場合は、Conflicts ページでマージが開きます。他のマージ競合と同じようにそこで解決してください。 マージに自分の編集が含まれるため、バックアップは削除されます。
Diversion は、Sync backup: <file path> (<date and time>) という名前のシェルフとしてバックアップを送信します。 次の場合、バックアップはワークスペースに残り、下記の手順で解決する必要があります:
  • バイナリファイルや、Diversion が行単位でマージしないファイル (画像、アーカイブ、Unreal Engine のアセット、Unity のシーンファイルやプレハブファイルなど)
  • 5 MB を超えるファイル
  • シンボリックリンク
  • 無視されたファイルなど、このワークスペースで一度も同期されていないファイル
  • 読み取り専用のワークスペース
  • 書き込み権限がない場合や、送信に 2 回失敗した場合など、Diversion が送信できないバックアップ。 シェルフが既に作成されている場合、そのシェルフはシェルフ一覧に残ります。

同期競合の解決

デスクトップアプリでは、Conflicts ページの Local backups からファイルを開きます。 ウィンドウには現在のワークスペースのファイルとバックアップが並べて表示され、どちらを残すかを選べます:
  • Keep current workspace file, delete all backups
  • Keep this backup, delete the others: バックアップがワークスペースのファイルを置き換えます。
  • Delete this backup: 画面に表示されているバックアップだけを削除します。
ファイルに複数のバックアップがある場合は、Choose a backup で 1 つを選びます。最新のものが最初に表示されます。 2 つのバージョンを比較して自分で統合するには、以下の手順に従ってください。 Unreal Engine のリソース(uasset など)の場合、バックアップされたファイルのリダイレクタが壊れているため (名前が変わっているため)、両方のバージョンをエディター内で開くことができません。 次の手順を実行してください:
  1. 元のファイルに変更がないことを確認します(ある場合は、競合を扱う前にコミットするかリセットしてください)。
  2. 元のファイルを .dv-conflict バージョンで上書きします。
  3. ファイルを上書きした後、エディターで開いて2つのバージョンの違いを確認できます。
  4. 違いを解決したら、変更をコミットするか、必要でなければリセットできます。
  5. .dv-conflict ファイル(上書き時にコピーを残した場合)を削除してワークスペースを整理します。
テキストファイルや画像などの他のファイルタイプの場合、プロセスは次のとおりです:
  1. お好みのローカル差分ツール(Meld、WinMerge、VSCode など)を使用してバージョンを比較するか、ファイルを並べて開きます。
  2. 元のファイルパスに編集を適用し、準備ができたらコミットします。
  3. .dv-conflict ファイルを削除してワークスペースを整理します。
.dv-conflict ファイルをクリーンアップしないと、ワークスペースに残り、file.dv-conflict.txt、file.dv-conflict-1.txt、file.dv-conflict-2.txt などのように、いくつもの競合バックアップが蓄積される可能性があります。 Diversion は 1 つのファイルにつき最大 5 つのバックアップを保持します。5 つすべてがある場合、新しい競合が発生するたびに file.dv-conflict-4.txt が置き換えられます。