2012-02-27 10 views
2

Gerritはコミット履歴の以前のもので、リポジトリの別の「ブランチ」にある未確認の変更をマージします。ここでは例があります:Gerritにブランチ内のすべてのコミットを強制的に実行させてコードレビューにする方法はありますか?

  1. チェックアウトヘリットブランチdevel
  2. FILE2.TXTを作成、追加、コミット、
  3. を見直しコードする refs/for/develにプッシュFILE1.TXTを作成、追加、コミット、 refs/heads/temp_branch
  4. にプッシュ

file2.txtが受け入れられ、マージされると、file1.txtはアップストリームであり、別の変更ブランチにはレビューされていないので、併合されます。これは潜在的に非常に問題があり、私が来る唯一の解決策ですと一緒にすべてのブランチにプッシュされたすべての変更をコードレビューに強制する。これは理想的ではありません。これは、ある承認者グループにブランチを持たせたい場合や、コードレビューがない場合(コードスワップする場合)です。

ここでの解決策は、file1.txtが同じリポジトリ内の別のブランチにプッシュされなかった場合と同様に、履歴のコミットをすべてコードレビューに強制することです。

このルールを適用する設定はGerritにありますか? 他のブランチを汚染することなく、refs/heads/に自由にプッシュできるワークフローを考える人はいますか?

多くのありがとうございます。

+0

あなたの例では、ステップ2は本当に/ temp_branchを参照するためのプッシュですか? – Brad

答えて

2

手順3のコミットが手順2のコミットを親として持つため、この現象が発生していると思われます。すべての親が提出されない限り、コミットを提出することはできません。私はこれがGerritのバグのようだとあなたに同意します - それはステップ2が提出されるまで提出することを拒否すべきです。

は、この回避策試してみてください - ステップ2の後にステップ2aを追加します。

2aに。

コミットが2つの異なるブランチになる場合、それらが線形であることは意味がありません。

もう1つの考え方 - このプロジェクトではどのようなマージ戦略を使用していますか?チェリーピックの場合は、必要に応じてマージするように変更するか、チェリーピックでない場合はチェリーピックに変更してみてください。私はここでの動作がマージ戦略間で異なっていると信じています。

+0

この欠陥は[Gerritサイト](http://code.google.com/p/gerrit/issues/detail?id=1107&sort=priority&colspec=ID%20Type%20Stars%20Milestone%20Status%)に記載されています20プライオリティ%20Owner%20サマリー)。あなたがチェリーピックを選んだのは正しいですが!コードレビューを経て複数のチェインされた変更が発生する可能性があるマージ競合の点でチェリーピックを信頼するかどうか、そして一般にコミット履歴の完全性を保つかどうかはわかりません。しかし、誤って未検討の変更をマージするという問題は回避されます。 – mut1na

+0

ちょうど追加するには、チェリーピックは本質的に元のコミットを合併する際に '公式'コミットIDにします。また、自分の変更のために元のブランチにリベースする必要があります(これは簡単ですつまり、すでにコードを持っているので、矛盾はありません!)、あなたのブランチは起点から分岐しません。 – mut1na

関連する問題