2012-03-12 13 views
3

私はトランクから派生した2つのフィーチャーブランチを持っていますが、どちらもフィーチャーAとフィーチャーBの異なるモジュールで大きなコード再編成を行います。両方ともトランクと同期しています。トランクは安定している必要があります。チェリーピックされたリビジョンをフィーチャーブランチとトランクの間でマージする方法

Feature-Bの作業の途中で、最近Feature-Aに実装された共有ライブラリの変更がFeature-Bに大きなメリットをもたらすことがわかりました。私はまだこの変更をトランクに入れたいとは思っていません。Feature-Aの残りのコードは安定していないので、ブランチを完全にマージすることはできません。これだけの機能をマージする

だから、AからBに支店、チェリーピッキングリビジョン間のマージを行います。1795 ^/projの/支店/機能-A:

のsvnは、-r 1786をマージします。

ブランチを再統合するときに後で問題になるかどうかはわかりません。フィーチャーBは、フィーチャーAより早く完成することが期待されます。その時点で、私たちの通常の手順は、フィーチャBをトランクに再統合し、トランクをフィーチャAにマージしてそれらを同期させておくことです。私はこれが衝突を引き起こすかどうかを事前に把握することが難しく、AがBに統合されているのを見て、今やそれらの変化が胴体を介して迂回されて戻ってくる。

svnの本では、ブランチを再びトランクに統合した後に--record-onlyを使って余分なマージを行うと言います。私はこのようなことが必要かもしれないと思っていますが、必要であればうまくいかないでしょう。

答えて

0

個人的には、長時間の機能分岐を持つ--reintegrateを使用しないでください。あなたの場合、あなたが問題のリビジョンに--record-onlyを行い、あなたが戻ってトランクに機能-Bをマージする前に、その後、normalyバックトランクに機能-Bブランチをマージし、可能性は

コマンドと仮定します。

svn merge -r 1786:1795 ^/proj/branches/Feature-A . 

がリビジョン2000を作成しました(ブランチフィーチャB)。

svn merge -c2000 --record-only ^/proj/branches/Feature-B . 

最後のステップはトランクに機能-Bブランチの完全なマージをやっている:

svn merge -r <begin>:<end> ^/proj/branches/Feature-B . 
+0

私はトランクからFeature-Bへの定期的なマージを行っているので、これは本当に--reintegrateなしで動作しますか?私が理解していることは、再統合せずにマージしようとすると、ブランチに複製されたトランクが変更されたために、多大な矛盾が発生するということです。 – myrosia

0

この意志

その後、バック機能-Bをマージする前に、あなたがしなければならないトランクに本当にあなたに問題を引き起こします。

AからBにマージする変更に追加ファイルが含まれている場合、Bを再統合すると、それらのファイルがトランクに追加されます。しかし、トランクからAへのマージを試みると(Aを再統合する前に行う必要がある)、マージはAに既に存在するAにこれらのファイルを再追加しようとし、ツリーの競合を引き起こします。

- レコードのみのマージは、再統合後に機能ブランチを維持するために特定のリビジョンの再マージをブロックするために使用されます。したがって、Bをリビジョン100を作成するトランクに再統合すると、--record-onlyだけがトランクリビジョン100をBにマージします。つまり、トランク(svn merge ^/Project1/trunk)リビジョン100からBでの同期マージスキップされ、Bに戻されることはありません。これにより、競合の可能性が回避され、再統合後に機能ブランチが引き続き使用され、トランクと再同期化されます。

残念ながら、再統合マージではマージ対象のブランチの個々のリビジョンを調べないので、--record-onlyマージはあなたの状況での競合を避けるのに役立つとは思いません。ブランチとトランクの現在の状態を確認し、それをトランク作業コピーに適用します。

+0

ありがとう、それは非常に便利な説明です、私はどこで木の衝突が起こるかを見ています。 – myrosia

関連する問題