14

Gerrit Webインターフェイスで[パッチセットの送信]をクリックすると、そのブランチにコミットが追加されるか、直前に別のコミットが送信された場合はマージコミットが作成されることがわかりました。

2つのコミットを作成する例:実際のコミットとマージコミット:

  1. ユーザーはコミットOに応じてパッチセットAを送信します
  2. ユーザーはコミットOに応じてパッチセットBを送信します
  3. パッチセットAを送信する
  4. パッチセットBの送信->O->AとO->Bの間にマージコミットを作成します

素晴らしい「リベース変更」ボタンがありますが、それはパッチセットを提出するために誰もが常にしなければならないことを意味します:

  1. [変更のリベース]をクリックします
  2. [変更セットの送信]をクリックします

マージコミットが役立つと思う唯一の理由は、コミットの日付を保持することです(ただし、リベースなしでそれが必要な理由は理解しています)。

不要なマージコミットの生成を回避するための自動リベースまたは少なくともチェックはありませんか?

4

2 に答える 2

14

はい。プロジェクトの送信アクションをCherryPickに変更します。これは、送信ボタンが押されたときのリベースとほぼ同じです。変更を送信するときにマージコミットなしで、探しているクリーンな履歴を保持します。

于 2012-07-25T15:12:44.663 に答える
0

プロジェクトのデフォルトの送信タイプを変更するには、プロジェクト設定ページにアクセスし、[必要に応じてマージ]ではなく[必要に応じてリベース]を選択します。

送信タイプの完全なドキュメントについては、https ://gerrit-review.googlesource.com/Documentation/config-project-config.html#submit-typeを参照してください。

Gerritがプロジェクトに変更を送信するために使用する方法は、プロジェクトコンソール、[プロジェクト]>[リスト]>[my/project]を介して任意のプロジェクト所有者が変更できます。一般に、送信された変更は、以下に記載されている例外を除いて、すべての依存関係も送信された場合にのみマージされます。次の送信タイプがサポートされています。

  1. 継承

    これは、グローバルdefaultSubmitTypeオプションによってオーバーライドされない限り、新しいプロジェクトのデフォルトです。

    親プロジェクトから送信タイプを継承します。すべてのプロジェクトでは、これは必要に応じてマージすることと同じです。

  2. 早送りのみ

    この方法では、Gerritは変更の送信時にマージコミットを作成しません。マージコミットは引き続き送信できますが、レビューのためにGerritにアップロードする前に、クライアントで作成する必要があります。

    変更を送信するには、変更が宛先ブランチの厳密なスーパーセットである必要があります。つまり、変更には、送信時に宛先ブランチのチップがすでに含まれている必要があります。

  3. 必要に応じてマージ

    送信される変更が宛先ブランチの厳密なスーパーセットである場合、ブランチは変更に早送りされます。そうでない場合は、マージコミットが自動的に作成されます。これは、従来のgitマージ動作またはgitmerge--ffと同じです。

  4. 常にマージ

    変更が宛先ブランチの厳密なスーパーセットである場合でも、常にマージコミットを生成します。これはgitmerge--no-ffの動作と同じであり、プロジェクトがgitlog--first-parentで送信を追跡する必要がある場合に役立つことがあります。

  5. チェリーピック

    親の系統を無視し、代わりに現在のブランチヘッドの上に新しいコミットを作成して、常にパッチセットを選択します。

    変更をチェリーピックすると、Gerritはコミットメッセージの最後に変更の承認の短い要約とWeb上の変更へのURLリンクを自動的に追加します。コミッターヘッダーもサブミッターに設定されますが、作成者ヘッダーは元のパッチセット作成者を保持します。

    change.submitWholeTopicが有効になっていて、依存する変更が同じトピックを共有しない限り、この送信タイプを使用する場合、Gerritは変更間の依存関係を無視することに注意してください。したがって、通常、送信者は、この送信タイプを使用するときに正しい順序で変更を送信することを忘れないでください。コミットメッセージの追加情報だけが必要な場合は、RebaseAlways送信戦略の使用を検討してください。

  6. 必要に応じてリベース

    送信される変更が宛先ブランチの厳密なスーパーセットである場合、ブランチは変更に早送りされます。そうでない場合、変更は自動的にリベースされ、ブランチは変更に早送りされます。

    Gerritがマージを行おうとすると、デフォルトでは、パスの競合がない場合にのみマージが成功します。マージの反対側でも同じファイルが変更された場合、パスの競合が発生します。

  7. 常にリベース

    基本的に、Rebase If Necessaryと同じですが、早送りが可能であっても新しいパッチセットを作成し、Cherry Pickのように、Change-Id、Reviewed-Onなどのフッターがマージされる結果のコミットに確実に存在するようにします。

    したがって、RebaseAlwaysはCherryPickに似ていると見なすことができますが、RebaseAlwaysは依存関係を無視しないという重要な違いがあります。

于 2019-10-29T19:38:27.640 に答える