衝突を解決するには、ワークスペース管理ツールが衝突の存在を検出し、衝突ファイルに対応する履歴ファイルを準備しなければなりません。
通常、衝突解決は、ユーザーが親および子ワークスペースの両方で変更されているファイルをプットバックしようとしたときに発生します。プットバックトランザクションで衝突が存在すると、子のファイルによって親のファイルの内容が失われてしまうため、子のファイルを親にコピーする処理は中止されます。
プットバックトランザクションが中止された後は、ユーザー側で更新ブリングオーバートランザクションを実行して子ワークスペースの更新を行う必要があります。プットバック実行時に自動ブリングオーバーオプションが指定されていれば、ブリングオーバートランザクションは自動的に実行されます。ワークスペース管理ツールは、ブリングオーバートランザクションの実行時に、子のファイルにも変更が加えられていることを検出すると、衝突が存在するものと解釈します。更新ブリングオーバートランザクションの処理対象であるファイルに衝突が存在しなければ、それらのファイルのコピーまたは更新は通常通りに行われます。
更新ブリングオーバートランザクションの実行時に衝突を検出されると、ワークスペース管理ツールは、ユーザーがその衝突を解決できるように、特別な手順を実行してファイルの準備を行います。
ワークスペース管理ツールはまず、親で作成されたデルタを子の SCCS 履歴ファイルにマージします。親と子のデルタはそれぞれ、子の SCCS 履歴ファイルの別々のブランチに置かれます。これらのデルタのマージが完了すると、子の履歴ファイルには次の情報が含まれることになります。
親で作成されたデルタ
子で作成されたデルタ
該当ファイルの 2 つのバージョンに共通する祖先で作成されたデルタ
バージョン管理ツールでは、SCCS デルタ履歴 (ブランチを含む) をわかりやすく図表示することができます。
子ワークスペースの 3 つのデルタ (共通の祖先、親、子) にアクセスできるため、ユーザーはワークスペース管理ツールの衝突解決トランザクションとファイルマージを使用して、親のデルタと子のデルタを比較 (共通の祖先との比較、親子相互の比較) できます。
ワークスペース管理ツールは、デルタをマージするほか、衝突ファイルの名前を子の Codemgr_wsdata/conflicts ファイルに追加します。この conflicts ファイルは、該当ワークスペース内で解決されていない衝突のある全ファイルがリストされているテキストファイルです。
これで、衝突解決トランザクションによる衝突解決の準備が整いました。