特定のマージ追跡情報が欠落していない限り、このシナリオではツリーの競合は発生しないはずです。
これを確認するには、次のコマンドを実行します。
$ svn switch ^/branches/COKE
$ svn mergeinfo --show-revs=merged ^/trunk
これにより、トランクからCOKEブランチにマージされたリビジョンのリストが出力されます。トランクでFILE1を変更したときに、リビジョンを見つけることができますか?おそらくその改訂はありません。
これは、SVNユーザーが1つのブランチから別のブランチに変更をマージするが、マージによって変更されたファイルだけでなく、作業コピー全体(つまりルートディレクトリを含む)をコミットする場合の一般的なケースです。
間違い:
$ svn merge ^/trunk
--- Merging r5 through r6 into '.':
M file.txt
--- Recording mergeinfo for merge of r5 through r6 into '.':
U .
$ svn commit FILE1
問題は、ルートディレクトリにsvn:mergeinfoプロパティが格納されていることです。Subversionはこのプロパティを使用してマージを追跡するため、作業コピー全体をコミットする必要があります。
右:
$ svn merge ^/trunk
--- Merging r5 through r6 into '.':
M file.txt
--- Recording mergeinfo for merge of r5 through r6 into '.':
U .
$ svn commit .
トランクを2回目にCOKEブランチにマージしようとしたときに、Subversionは、FILE1がトランクで削除され、同時にCOKEブランチで変更されたことを検出しました(ステップ2による)。その結果、ファイルにツリーの競合(ローカル編集、マージ時の着信削除)のマークが付けられました。
それを修正する方法は?
次に、ブランチCOKEのマージ追跡情報を修正する必要があります。これを行うには、-record-onlyオプションを指定し、適切なリビジョンを指定して、手順2を繰り返します。
$ svn merge --record-only -cN ^/trunk
--- Recording mergeinfo for merge of r5 through r6 into '.':
U .
$ svn commit .
ここで、Nは、マージしようとしたトランク内のFILE1の変更です。