競合とは、複数のユーザーが同じファイルをチェックアウトして、それぞれがファイルを編集したケースにおいて、先にコミットした変更内容を後からコミットしたユーザーにより、上書きされてしまうことを示します。(Subversionは、競合を検知した場合、コミットエラーとします。)
Subversionはロック方式に「コピー・修正・マージ方式」を採用しているため、Subversionでバージョン管理を行う上で、競合(コンフリクト)の発生によるコミットエラーは避けられないと言っても過言ではありません。
マージとは
マージとは、複数のファイルを合わせて一つのファイルにすることです。チェックアウトしたソースファイルは、その時点では最新のはずですが、自身が知らない間に、いつの間にか他のメンバーが同じファイルを編集してリポジトリにコミットしている可能性があります。
その場合、自身が行った変更分とリポジトリ上の変更分の両方をと離婚で統合する必要があります。
その作業をマージと言います。
競合の発生
変更箇所が重複していなければ、コミット時にSubversionが自動的にマージ(2つのファイルを統合)してくれます。
ただし、自動的にマージできない場合には競合(コンフリクト)が発生し、コミットエラーとなります。
競合は、変更位置が重なっていた場合に発生します。
この場合は、手作業で競合を解消する必要があります。
競合の解消
前述のとおり、マージはSubversionが自動的に行ってくれますが、競合の解消は、手作業で行う必要があります。
上記で示した例では、自身が編集したファイル(ローカル)のみを取り込めばよく、他のメンバーが変更した内容は破棄しても良いのであれば、「チーム同期化」パースペクティブの比較エディタ上で競合箇所を右クリックし、「マージ済みとマーク」をクリックします。
逆に、他のメンバーが変更した内容のみを取り込めば良い場合は、「<」ボタンを押下し、その後で、「マージ済みとマーク」をクリックします。
両方を取り込みたい場合や、マージのために追加の修正等が必要な場合は、手作業で編集した後、「マージ済みとマーク」をクリックします。
競合した箇所全てに「マージ済みとマーク」してやれば、コミットに成功します。