9

私が決定したコミットがいくつかありますが、実際には、トランク作業よりもブランチ作業の方が多いでしょう。ブランチを作成してトランクを元に戻すにはどうすればよいですか?

現在のトランクをブランチにコピーしてトランクを元に戻すのと同じくらい簡単ですか? それとも、これは後で頭痛の種になりますか?

4

4 に答える 4

18

最後の「良い」リビジョンが 100 で、現在は 130 であると仮定して、新しいブランチを作成する Philips の方法は次のようなものになると思います。

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
于 2008-09-29T18:49:26.870 に答える
3

正直なところ、変更をコピーして、トランク、ブランチを元に戻し、変更をブランチにコミットします。主な理由は、後でマージしやすいことです (後でトランクから分岐点でブランチにマージする場合、マージには最初の変更が元に戻されます)。

マージするときはいつでもリビジョンをスキップできるので、これは「正しい」方法ではないかもしれませんが、通常、後で頭痛の種になることはほとんどありません。免責事項: 私は svn の第一人者ではないので、やり方が間違っているので簡単かもしれませんが、svn はよく使います。

于 2008-09-29T14:41:34.110 に答える
2

Philip の方法に従うことには何の問題もありませんが、改訂履歴にいくらかの「残骸」が残ります。整理のためにそれらを削除したい場合で、リビジョンが HEAD にある場合は、次の手順に従ってリポジトリから削除できます。

更新:フィリップの方法は、彼が述べた理由により、質問で提案された方法よりも優れています。私の方法とフィリップの方法は似ていますが、トランクを元に戻す代わりに、リビジョン履歴からリビジョンを削除することを提案します。(私が言ったように、これは、削除したいすべてのリビジョンがリポジトリの HEAD にある場合にのみ実行できます。)

于 2008-09-29T14:31:31.653 に答える
0

私はここで利用可能な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 を使用すると、マージ ポイントが追跡され、誤った競合が回避されます)。

于 2008-09-29T16:09:39.967 に答える