コミット後に適切にブランチし、svnでトランクを元に戻すにはどうすればよいですか?
質問
いくつかのコミットがありますが、事後、トランクの作業よりもブランチの作業を増やすことにしました。ブランチを作成してトランクを元に戻しながら、後でマージが苦痛にならないようにするにはどうすればよいですか?
現在のトランクをブランチにコピーしてトランクを元に戻すのと同じくらい簡単ですか?または、これは後で頭痛を引き起こしますか?
解決
フィリップスの方法は、次のようなものになると思います。リビジョンは100で、現在は130であり、新しいブランチを作成します。
svn copy -r100 svn://repos/trunk svn://repos/branches/newbranch
svn merge -r 100:130 svn://repos/trunk svn://repos/branches/newbranch
これらのリビジョンで行われた変更を保存して、トランクに再び適用できるようにすることです。
トランクを元に戻すには:
svn merge -r130:100 .
svn ci -m 'reverting to r100 (undoing changes in r100-130)' .
(これらを実行した順序は関係ないので、ブランチを作成する前にトランクを元に戻すことができます。)
その後、リポジトリで作成した新しいブランチに切り替えることができます:
svn switch svn://repos/branches/newbranch workdir
他のヒント
正直に言うと、変更をコピーしてトランク、ブランチを元に戻し、ブランチに変更をコミットします。主な理由は、後で簡単にマージできることです(後でブランチからブランチにブランチをマージする場合、マージには最初の変更の復帰が含まれます)。
これは「正しい」とは限りません。方法は、マージするときにいつでもリビジョンをスキップできるためですが、通常は後で頭痛の種を減らすことができます。免責事項:私はsvnの第一人者ではないので、間違っているので、私にとっては簡単かもしれません。
フィリップの方法に従うことには何の問題もありません。改訂履歴。整理のためにそれらを削除したい場合、リビジョンがHEADにある場合は、これらの手順。
更新:フィリップの方法は、彼が述べた理由により、質問で提案された方法よりも優れています。鉱山とフィリップの方法は似ていますが、トランクを元に戻すという点を除いて、改訂履歴から改訂を削除することを提案します。 (私が言ったように、これは削除したいすべてのリビジョンがリポジトリのHEADにある場合にのみ実行できます。)
ここではsvnを利用できませんが、これが私がやろうとしている方法です:
履歴内で不正な内容をコミットし始めた場所を特定します(「130」にいる間にリビジョン「100」など)
svn copy trunk branch # create your branch while preserving history
svn copy trunk@100 trunk #replace current revision with revision 100
これは、逆マージを追加せずに悪い履歴をバイパスする必要があります(実際には、100から130の間でトランクの履歴をバイパスしていますが、ブランチでその履歴へのリンクを保持し、revを強制しながらトランクにアクセスすると、正しい履歴)
その後
svn switch branch workdir
これは、トランクから変更を完全に削除する場合に機能します。維持したい小さなものがある場合は、ブランチからトランクに再度チェリーを選択できます(svn 1.5を使用する場合、マージポイントを追跡し、誤った競合を回避します)