私たちは 2 週間かけて、ある問題について間違った道をたどりました (それに伴う SVN リポジトリへのすべてのコミットを行いました)。これで、適切な解決策が見つかりました (2 週間前の状態に戻すには、コード ベースが必要です)。2 週間前に分岐する必要がありましたが、今は関係ありません。
明らかに、プロジェクトの 2 回目のチェックアウトを行い、それを現在のバージョンのリポジトリにコピーしてチェックインできます。
2回目のチェックアウトなしでこれを行うよりクリーンな方法はありますか?
私たちは 2 週間かけて、ある問題について間違った道をたどりました (それに伴う SVN リポジトリへのすべてのコミットを行いました)。これで、適切な解決策が見つかりました (2 週間前の状態に戻すには、コード ベースが必要です)。2 週間前に分岐する必要がありましたが、今は関係ありません。
明らかに、プロジェクトの 2 回目のチェックアウトを行い、それを現在のバージョンのリポジトリにコピーしてチェックインできます。
2回目のチェックアウトなしでこれを行うよりクリーンな方法はありますか?
あなたが望むことをする方法はたくさんあります。最も簡単な方法は、コードベースの新しいコピーを開発マシンにチェックアウトし、間違った開発パスをたどる直前に行われたコミットのリビジョンを指定することです。次に、そのコードを最新のリビジョンとしてチェックインします。コードベースをそのリビジョンに効果的に「戻す」だけでなく、間違ったソリューションの一部の要素が最終的に有用であることがわかった場合でも、それらの要素に簡単にアクセスできます。
また、前述のように、コードベースはいつでも、どのリビジョンでも分岐できます。作業を開始する前にリビジョンのブランチを切り取り、新しい開発パスに沿って続行します。このブランチをトランクにマージすると問題が発生する可能性があることに注意してください。ブランチでの開発の最終結果を、トランク ホールセールのコードベースに置き換える必要があります。それは可能ですが、面倒になる可能性があります。
マイクが提供するソリューションは私にとってはうまくいきます。
別の支店で
$ svn merge -r 303:302 http://svn.example.com/repos/calc/trunk
(これにより、302 と 303 の間の変更が取り消されます)。
次に、ブランチで変更をコミットし、テストしてから、通常どおりトランクにマージできます。
これを処理するには、いくつかの方法があります。
$ svn merge -r$rev2:$rev1 .
これは、$rev2 > $rev1 であると仮定しています。これにより、これら 2 つのリビジョン間の変更が取り消されます。単一のリビジョンを取り消す場合は、これを使用できます。
$ svn merge -c -$rev .
つまり、リビジョンは負の数でなければなりません。これにより、その 1 つのリビジョンだけが取り消されます。
この作業がトランクではなくブランチで行われ、そのブランチを破棄したい場合は、単純にブランチを再作成し、古い悪いブランチを削除することもできます。ブランチ (およびタグ) は、任意の時点から作成できます。
$ svn cp -r$rev $REPO/branches/$bad_branch/$proj $REPO/branches/$new_branch
$ svn delete $REPO/branches/$bad_branch