> ## Documentation Index
> Fetch the complete documentation index at: https://docs.diversion.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# 競合

> 発生しうる競合の種類と、それらを効果的に解決する方法を学びます。

# 競合の種類

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

## マージ競合

これらの競合は主に、異なるブランチからの変更が同じファイルに影響を与えるブランチマージ時に発生します。
ただし、次のようなシナリオでは、ワークスペース内でもマージ競合が発生する可能性があります：

1. *Auto-Update* を有効にしていて、他のチームメンバーが同じブランチにコミットした場合。
2. ワークスペースでブランチを切り替え、ワークスペースにコミットされていない変更が含まれていた、
   またはターゲットブランチで変更をアンシェルブすることを選択した場合。
3. 別のコミットをワークスペースにチェリーピックした場合。

マージ競合が発生すると、変更はワークスペース外のクラウドに保存され、
デスクトップアプリで確認して解決できます。

## 同期競合

Diversion では、作業中のワークスペースはローカルとリモートの両方に保存されます。
通常、ファイルの更新はローカルワークスペースからリモートへ同期されますが、リモート
ワークスペースがより新しい変更を持っており、それをローカルコピーに同期する必要がある場合もあります。
たとえば、ワークスペースで *Auto-Update* が有効（デフォルト）で、他のチームメンバーが同じブランチに
コミットした場合に発生することがあります。もう1つの例は、別のブランチからの変更を現在のブランチにマージした場合です。

同期競合は、ローカルの変更がワークスペースのリモートミラーに同期される機会がないうちに、
リモート側でローカルで編集したのと同じファイルを変更する新しいコミットを受け取った場合に発生します。
ワークスペースの同期を一時停止していたり、しばらくオフラインだったりすると、同期競合に遭遇する可能性が高まります。
一方、ブランチで単独作業したり、*Auto-Update* を無効にすると、同期競合の可能性は減少します。

同期競合が発生すると、Diversion は自動的にローカル編集したファイルの `.dv-conflict` サフィックス付きの
バックアップを作成し、元のパスを受信した内容で上書きします。これにより、作業内容が失われないようにします。

## `.dv-conflict` ファイル

これらのファイルは競合を示すためだけに作成され、リポジトリにコミットすることを意図していません。
そのため、Diversion によって追跡されず、コミットすることはできません。

ローカル競合がある場合、Diversion デスクトップアプリのワークスペースに警告が表示されます：<img src="https://mintcdn.com/diversion-2/hNFKL35i0RPRSCiK/images/conflicts/dv-conflict-warning.png?fit=max&auto=format&n=hNFKL35i0RPRSCiK&q=85&s=d1f787dff04d64e5837e6062f9c4398c" alt="ローカル競合の警告" width="388" height="34" data-path="images/conflicts/dv-conflict-warning.png" />
ワークスペースの *Flat Changes* タブでバックアップされた競合ファイルの一覧を確認できます：<img src="https://mintcdn.com/diversion-2/xwHUGMHU2de4U9rb/images/conflicts/flat-changes-tab-selected.png?fit=max&auto=format&n=xwHUGMHU2de4U9rb&q=85&s=e6b63f52a409bd0fe7f8ea4e7c9d8cce" alt="Flat Changes 選択" width="127" height="45" data-path="images/conflicts/flat-changes-tab-selected.png" />
競合するファイルには特別なアイコンと色が付きます：<img src="https://mintcdn.com/diversion-2/xwHUGMHU2de4U9rb/images/conflicts/dv-conflict-file-item.png?fit=max&auto=format&n=xwHUGMHU2de4U9rb&q=85&s=c796b5e4c5df1f5d0d227b5dd4481b6b" alt="競合ファイル項目" width="376" height="119" data-path="images/conflicts/dv-conflict-file-item.png" />
上記の例では、ファイル `syncing.mdx`（受信した変更を含む）が、バックアップファイル
`syncing.dv-conflict.mdx`（同期されていないユーザーのローカル変更を含む）と競合しています。
`.dv-conflict` ファイルの内容はアプリで表示可能ですが、履歴はありません。

`.dv-conflict` ファイルは安全に無視でき、競合の元となったファイルを含む他のファイルは通常どおり
作業とコミットを続けることができます。ただし、差分がマージしにくくなる前に、
できるだけ早く競合を解決することをお勧めします。

`.dv-conflict` ファイルは自動的に削除されないため、競合を解決したら自分で削除してください。
Diversion デスクトップアプリで1つずつ削除するか、ファイルエクスプローラーから一括で削除できます。
コンテキストメニューの *Show in Explorer/Finder* を使用すると、ファイルの場所をすばやく確認して削除できます。

## 同期競合の解決

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` などのように、いくつもの競合バックアップが蓄積される可能性があります。
