web-dev-qa-db-ja.com

マスターの中間コミットに修正プログラムを適用する

以下は、Gitflowワークフローに従っています。ここで、masterブランチにはコミット履歴(git tag)異なるリリース。

リリース管理の観点から、releaseおよびmasterブランチとマージした後、developブランチを削除します。

enter image description here

ホットフィックスを適用するには、最初にgit checkoutmasterブランチから特定のリリースをコミットし、その特定のコミットからホットフィックスブランチを作成し(オレンジ色で表示)、変更を加えます。

enter image description here

質問:

1)しますgit mergeホットフィックスブランチがmasterブランチの中間コミットノード(以下に示す)にマージされることを許可しますか? masterの先端にマージする代わりに、ホットフィックスは0.1リリース

enter image description here 2)「いいえ」の場合、masterブランチを介して(特定のリリースの)ホットフィックスを適用する方法は? releaseブランチが削除されたため

1
overexchange

あなたは実際に複数の生産的なバージョンを管理する方法を求めています。 Gitflowはこれをカバーしておらず、複雑なトピックです。

サポートされているバージョンごとにブランチを持つことができます。 version/1.9.0、そして「ネストされたgitflow」を実行し、そのバージョンブランチをマスターのように扱います。これは、ポートフィックスをバック/フォワードするまで十分に機能します。

残念ながら、これまでの経験はありませんので、これ以上は役に立ちません。


文字通りの質問に答えるには:

これは不可能です。次のすべての履歴をリベースすることもできますが、それは非常に多くの不便とトラブルを引き起こし、それはオプションではありません。

5
marstato

Marstatoが言うように、複数のマイナー(またはメジャー)リリースをサポートするには、複数のバージョンブランチが必要です。これらのバージョンのブランチに加えて、修正ブランチがあります。マスターブランチはもうありません。

したがって、あなたの状況では、バージョン/0.1、バージョン/0.2およびバージョン/0.3ブランチがあります。そして、fix/0.1、fix/0.2およびfix/0.3ブランチ。 0.1バージョンにバグが見つかった場合、その修正をfix/0.1ブランチに適用し、その修正ブランチをversion/0.1とfix/0.2にマージします。次に、fix/0.2をversion/0.2とfix/0.3にマージします(以下同様)。最後に、最後の修正ブランチを対応するバージョンとブランチにマージし、開発ブランチにマージします。

バージョンをサポートする必要がなくなったら、バージョンを削除してそのバージョンのブランチを修正し、マージ時にスキップできます。

多くのバージョンをサポートしている場合、これは多くのオーバーヘッドをもたらすことに注意してください。修正ブランチを定期的にマージするだけでオーバーヘッドを削減できますが、テストチームがどのバージョンのどの修正プログラムがすでにマージされているかを知る必要があるという問題が生じます。

以下に、バージョン0.1および0.2の短い例を示します。

Example of the proces described above

4
pkempenaers