14

Gerrit を使用して「git-flow」のようなワークフローを実装しようとしていますが、パズルの最後のピースを理解できないようです。

私の問題には2つの前提条件があります:

  • Gerrit は 1 つのブランチへのマージのみを実行します
  • マージ コミットを Gerrit にプッシュすることは許可しません。マージは、変更が承認された後に Gerrit が行う必要があります。

解決したいことは以下です。この git の状況を考えてみましょう:

Master 0 
        \
         \
Develop   0-----0-----0-----0

1 つのコミットを持つ master ブランチと、複数の追加コミットを持つ master からフォークされた開発ブランチがあります。しばらくすると、develop ブランチが master にマージされ、次の製品リリースが作成されます。開発者は、develop からのトピック ブランチと厳密なリベースを使用して作業します。彼らのコミットは、プッシュする前に常に最新のアップストリーム開発の上にリベースされます。これにより、履歴が線形になり、早送りコミットのみが行われます。

ここで、誰かが master からホットフィックス ブランチを作成し、master にマージしたとします。

Master 0--------0 HF 
        \
         \
Develop   0-----0-----0-----0

このコミットはマスター ブランチにのみマージされるようになりましたが、開発者は変更にバグ修正を組み込むために開発ブランチでこのコミットを必要とします。通常、マスター ブランチをマージして開発ブランチを開発しますが、私の前提条件を考慮すると、ローカル マージ コミットが作成されるため、これは不可能です。

私の質問は、開発者による新しい変更にバグ修正が含まれるように、マスター ブランチからローカルの開発ブランチに新しいコミットを組み込むにはどうすればよいですか? 理想的には、スクリプトを変更して、最初にバグ修正の変更をローカルの開発ブランチに適用し (マージしますが、マージ コミットは行いません)、次に開発者のコ​​ミットとプッシュをリベースします。このようにして、バグ修正は新しい変更に自動的に追加され、別のコミットではなく、新しいコミットの一部として表示されます。

私は可能な解決策について考えてきました:

  • 開発ブランチへのコミットをチェリーピッキングします。次回開発がマスターとマージされると、これは常に重複したコミットになると思います。これを回避する方法はありますか?
  • ここで説明されているようにリベース: http://davitenio.wordpress.com/2008/09/27/git-merge-after-git-cherry-pick-avoiding-duplicate-commits/。これは、開発ブランチが公開されているため、おそらく問題を引き起こしますか?

私の質問が明確であることを願っています。さらに明確にする必要がある場合はお知らせください。私は自分のワークフローにかなり厳格であることを知っていますが、Gerrit と組み合わせると理想的です。それができない場合は、おそらくマージコミットを許可します...

4

3 に答える 3

7

オプションを検討した後、この方法を放棄することにしました。Gerrit は、ほとんどの場合、単一統合ブランチの開発を対象としているように思えます。

変更を 2 つのブランチにマージする必要がある場合 (たとえば、マスターして開発する必要があるホットフィックス)、余分な作業/レビューに相当するあらゆる種類のフープをジャンプする必要があります。1 つのブランチに固執することにしました。

Git フロー モデルは、Gerrit の設計にはあまり適していないと思います。他の人が Gerrit と Git フローを統合している場合は、その方法について聞きたいです。

于 2011-12-08T23:09:19.423 に答える
4

ホットフィックスを開発ブランチにマージできるはずです。マスターをマージする必要はありません。これはこのワークフローで処理されます(修正プログラムは別のリリースと見なされ、その上で作業をリベースします)。

https://plus.google.com/109096274754593704906/posts/R4qkeyRadLR

于 2011-12-06T20:02:41.643 に答える
3

最善の解決策は、master または hotfix ブランチを開発ブランチにマージすることです。あなたの「マージコミットなし」の前提条件が何を解決しようとしているのかはわかりませんが、おそらくそれ以上の手間がかかるでしょう。

一方、cherry pick を実行すると、通常、git はマージ中に重複したコミットを検出し、問題なく自動マージします。しかし、問題があると楽しくなくなります。また、どの修正が選択されていてどれが選択されていないかは明確ではありませんが、マージの場合は非常に明確です。

于 2011-12-06T20:54:55.230 に答える