Git
または(バージョンにもっと興味がありますが、比較は間違いなく役立ちます)のいずれかを使用して次のワークフローを実現するための好ましい方法は何ですか?Subversion
Git
最近製品のメジャーリリースがあり、と呼ばれる特定のポリシヒンブランチがあるとしましょう
release-2.0.x
。その後、開発が継続され、いくつかの機能ブランチがに統合されました
master/trunk
(これらは後で今後の一部になりrelease-2.1.x
ます)。現在、ある時点で別の機能(つまり、
critical-feature
)が開発され、にマージされましたmaster/trunk
。この機能は非常に重要であるため、にバックポートする必要があることを認識していrelease-2.0.x
ます。
これは、説明されているケースの小さな疑似図です。一番上のすべてがrelease-2.0.x
現在master/trunk
との間のツリーの違いをもたらし、マージの問題につながることに注意してください(そうでなければ、単純にマージしcritical-feature
てこの質問を書かないようにすることができます:)
(features added since 2.0.x, which
should not be backported)
^ ^ ^
| | | (code refactorings done
| | | in master/trunk)
\ | / (*) (*) (*)
-------------------------------------------------------> master/trunk
| |
| |
| |
\ release-2.0.x \ critical-feature
(should be backported)
質問:
VCS
観点から機能のバックポートを実行するための最良の方法は何でしょうか?これは、競合を解決する競合を伴う
merge
対応するブランチの単純なものとして実行する必要がありますか?critical-feature
または
cherry-pick
、これはコミットのとして実行する必要があります。コミットは、実行時ににマージcritical-feature
さmaster/trunk
れますか?または、ブランチcherry-picks
内の各コミットのセットとしても使用できますか?critical-feature
紛争解決の手順について何かアドバイスをいただけますか?
release-2.0.x
との現在の違いが非常に大きく、「ナイーブ」なバックポートがコードのリファクタリングや機能の欠落、またはの後に追加されたmaster/trunk
ために大量の競合を引き起こす場合は、どうすればよいですか?API
release-2.0.x
標準的なマージまたはチェリーピッキングのアプローチを除いて、このルーチンに提供する特定の何かがあります
Git
か?競合の量が膨大な場合、リベースSubversion
は役に立たないと思いますが、明らかに、私は間違っている可能性があります。