Subversionの機能を調べる際に、 svnbookの「分岐とマージ」の章の「基本的なマージ」セクションの「変更の取り消し」サブセクションで説明されているユースケースをテストしようとしました。私はバージョン1.6.4を使用していますが、そのセクションのテキストは両方のバージョンの本で同じです。
作業用コピーディレクトリで、ファイルtestcode.pyを編集し、編集ごとに1行追加し、編集ごとにコミットします。数回コミットした後、ファイルは次のように読み取られます。
this is my first import to trunk. r1.
this is my first commit, first edit of testcode.py. r2.
this is another edit of testcode.py. r3.
this is an edit of testcode.py. i'll get rid of this one. r4.
this is another edit of testcode.py. keeping it. r5.
yet another edit. keeping it. r6.
リポジトリのリビジョン番号はファイルの行と一致しているため、/ trunk / testcode.py @ rNでは、ファイルの最後の行がrNで終わる行になります。私がやりたいのは、r4で終わる行を削除し、前後のすべてを変更しないようにすることです。
svnbookの「変更の取り消し」セクションの例に従って、コマンドを実行します
svn merge -c -4 file:///path_to_repos/trunk
これにより、競合が発生し(commitではなく、そのコマンドを実行すると)、merge-leftファイルには行r4までのすべてが含まれ、merge-rightファイルには行r3までのすべてが含まれます。つまり、過去の変更を削除する代わりに、コマンドはファイル全体をリビジョン3または4に戻し、後続のリビジョン(この場合は5および6)の変更を削除するように見えます。
svnbookの例を読むと、ユーザーはリビジョン303でコミットされた変更を元に戻し、結果を競合なしでリビジョン350にコミットします。実行したコマンドは、すべてを保持するsvnステータスがMのファイルを生成するはずです。 r4で終わる行を除く行。
私は本の例を間違って読んでいますか、例は間違っていますか、それとも私が気づかなかった他の形のユーザーエラーがありますか?