Gitを使用してリリースを管理するための「正しい」アプローチとは何かが見つかりませんでした。たとえば、master、release-1、release-2、release-3のブランチがあります。リリース1はすでにリリースされており、バグ修正とリリースされたバージョンのタグ付けのみを行っています。リリース2は間もなくリリースされる予定で、私は主にこのブランチで開発し、3ではさらに将来必要になるものを開発します。
リリース2でいくつかの機能を追加し、それも3に移行する必要がありますが、1には移行しない場合、次のようにする必要があります。
すべてのバージョンでsthを変更する必要がある場合、マスターで変更し、すべてのブランチにチェリーピックする必要がありますか?
マスターを最新(リリース3ブランチ)またはリリース3の開発者で最新の状態に保ち、リリース4ブランチが必要になる直前にマスターにマージする必要がありますか?
Release-1またはrelease-2でsthを修正する場合、マスターにマージするか、チェリーピックする必要がありますか?
いつチェリーピックするべきか、いつマージするべきか、そしてブランチ間のコードの流れが正しいかどうかはよくわかりません。
Junio C Hamano(gitメンテナー)ブログの次の投稿を参照してください。
gitworkflows マニュアルページもご覧ください。
あなたが求めているのは、通常マージワークフローの問題です:どこからどこにマージするか。
ただし、DVCSでは、マージは公開に関する考慮事項(これらのブランチはプッシュされます)の影響も受けることを覚えておく必要があります。ローカルリポジトリ、またはパブリックリポジトリへ)
特に「マスター」ブランチは、誰かがリポジトリのクローンを作成したときにデフォルトで表示されるブランチです。つまり、そのユーザー/開発者にとって最も役立つと思われるものを参照する必要があります。 ( 他のブランチはデフォルトではローカルで参照されないため )
1 /リリース2で機能を追加すると、3にも移行するはずですが、1には移行しません。
必要な進化を達成するためにr2にいくつかのコミットを行った後、実際にr2をmasterにマージできます。そうすれば、限られた数のコミットのみがマスターに表示され、「コミットの乱雑さ」を回避できます。
ただし、r3がプッシュおよび公開されている場合は、r3の場合はr2から必要なものを選択できます。それ以外の場合は、r3をr2にリベースできます。 " gitワークフローとリベースvsマージ "の質問を参照してください
2 /すべてのバージョンでsthを変更する必要がある場合、マスターでそれを行い、すべてのブランチにチェリーピックする必要がありますか?
R2でそれを実行してから、masterとr1およびr3でマージする必要があります。そうすれば、これらのブランチに追加されるコミットは1つだけです。
3 /マスターを最新(リリース3ブランチ)またはリリース3の開発者で最新の状態に保ち、リリース4ブランチが必要になる直前にマスターにマージする必要がありますか?
他の同僚がリポジトリのクローンを作成するときに何を表示するかによって異なります。
しかし、1 /から、マスターはr3(将来の長期リファクタリング)ではなくr2(現在の開発)を表していると収集しました
4 /リリース1またはリリース2でsthを修正する場合、マスターにマージするか、チェリーピックする必要がありますか?
私はします:
1)r2をマスターにマージしてからマスターをr3にマージします(r3はマスターへのすべての変更を受け入れることができるはずです)
2)r1にコミットし、r2にマージし、r2をマスターにマージしてから、マスターをr3にマージします。
3)おそらく、r3の代わりにmasterを使用し、リリースの準備中の場合にのみr3のブランチで開発し、ここですべての変更をmaster(次のバージョンになる)にマージする必要があります。または、Linuxとして「master」および「next」ブランチを使用します。
4)マスターにマージ
マージはチェリーピッキングよりもクリーンだと思います。コミットが行われたときに予期していなかった古いブランチに機能やバグ修正をバックポートする必要がある場合にのみチェリーピックする必要があると思います(そうでない場合は、最も古いブランチでコミット/リリースします)コードをオンにします)。