マージリクエストレビュー

マージリクエストは、GitLabプロジェクトのファイルに変更を加える主な方法です。変更を提案するためにマージリクエストを作成し、送信します。あなたのチームはマージリクエストにコメントを残し、ユーザーインターフェイスから受け入れることができるコードの提案を行います。あなたの作業がレビュアーされると、チームメンバーはそれを受け入れるか拒否するかを選択できます。

GitLab インターフェースからマージリクエストをレビューすることができます。GitLab Workflow VS Codeエクステンションをインストールすると、Visual Studio Codeでマージリクエストをレビューすることもできます。

概要については、マージリクエストレビューをご覧ください。

推奨レビュアー

GitLab は機械学習を使ってマージリクエストのレビュアー候補を提案します。

レビュアーを提案するために、GitLabは以下を使います:

  • マージリクエストの変更点
  • プロジェクトの貢献グラフ

Suggested Reviewers は、コードオーナー、プロフィールステータス、マージリクエストルールともインテグレーションしており、レビュー基準を満たすレビュアーを選択する際に、より多くの情報に基づいた決定を下すことができます。

Suggested Reviewers

詳しくは、Suggested Reviewersのデータ使用法をご覧ください。

レビュアー候補の有効化

プロジェクトのメンテナーやオーナーは、プロジェクトの設定からレビュアー候補を有効にすることができます。

レビュアー候補を有効にすると、GitLab があなたのプロジェクトの ML モデルを作成し、レビュアー候補を生成します。プロジェクトが大きくなればなるほど、このプロセスには時間がかかります。通常、モデルは数時間以内にサジェストを生成できるようになります。

機能を有効にした後のアクションは必要ありません。モデルの準備が整うと、マージリクエストの右側のサイドバーにあるレビュアドロップダウンリストに、新しいコミットを含むレコメンデーションが入力されます。

マージリクエストをレビュー

マージリクエストをレビューする際、自分だけが見ることができるコメントを作成することができます。準備ができたら、1 つのアクションでまとめて公開することができます。レビューを開始するには:

  1. レビューしたいマージリクエストに移動し、変更タブを選択します。このタブに表示される差分のナビゲーションの詳細については、マージリクエストの変更を参照してください。
  2. ガターでAdd a comment to this line({comment}) を選択すると、diff の行が展開され、コメントボックスが表示されます。GitLab バージョン 13.2 以降では、複数の行を選択することができます。
  3. テキストエリアに最初のコメントを書き、コメントの下にあるStart a reviewを選択します。
  4. コードの行にコメントを追加し続けます。各コメントの後に、レビューに追加を選択します。レビューの一部として作成されたコメントは、あなたがレビューを提出するまで、あなただけに表示されます。
  5. オプションです。レビューコメント内でクイックアクションを使用することができます。コメントは公開後に実行するアクションを表示しますが、あなたがレビューを投稿するまで実行しません。
  6. レビューが完了したら、レビューを投稿できます。コメントが表示され、コメントに含まれるクイックアクションが実行されます。

マージリクエストを承認し、レビュアー リストに表示された場合、名前の横に緑色のチェックマーク{チェック-丸で塗りつぶされた}が表示されます。

レビュアーリクエスト

マージリクエストにレビュワーを割り当てるには、マージリクエストのテキストエリアで、/assign_reviewer @user クイックアクションを使用します。または

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. コード > マージリクエストを選択し、マージリクエストを見つけてください。
  3. 右サイドバーのレビュアーセクションで編集を選択します。
  4. 割り当てたいユーザーを検索し、選択します。

マージリクエストがユーザーのレビュアーリクエストに追加されます。

複数のユーザーから

13.9でGitLab Premiumに移行しました。

マージリクエストに複数のレビュワーを割り当てるには、マージリクエストのテキストエリアで/assign_reviewer @user クイックアクションを使用します。あるいは

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. コード > マージリクエストを選択し、マージリクエストを見つけてください。
  3. 右サイドバーのレビュアーセクションで編集を選択します。
  4. ドロップダウンリストから、マージリクエストに割り当てるユーザーをすべて選択します。

レビュアー を削除するには、同じドロップダウンリストからユーザーをクリアします。

マージリクエストの変更を diff としてダウンロード

マージリクエストに含まれる変更を diff としてダウンロードします:

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. コード > マージリクエストを選択します。
  3. マージリクエストを選択します。
  4. 右上隅で、[コード] > [プレーン diff] を選択します。

マージリクエストの URL がわかっている場合、.diff を URL に追加することで、コマンドラインから diff をダウンロードすることもできます。この例では、マージリクエスト000000の diff をダウンロードします:

https://gitlab.com/gitlab-org/gitlab/-/merge_requests/000000.diff

1行のCLIコマンドでdiffをダウンロードして適用するには、次のようにします:

curl "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/000000.diff" | git apply

マージリクエストの変更をパッチファイルとしてダウンロードします。

マージリクエストに含まれる変更点をパッチファイルとしてダウンロードします:

  1. 左のサイドバーで「検索」または「移動」を選択してあなたのプロジェクトを検索します。
  2. コード > マージリクエストを選択します。
  3. マージリクエストを選択します。
  4. 右上で、コード > パッチを選択します。

マージリクエストの URL がわかっている場合、URLに.patch を追加することで、コマンドラインからパッチをダウンロードすることもできます。この例では、マージリクエスト000000のパッチファイルをダウンロードします:

https://gitlab.com/gitlab-org/gitlab/-/merge_requests/000000.patch

git amを使用して、1 行の CLI コマンドでパッチをダウンロードして適用するには、次のようにします:

curl "https://gitlab.com/gitlab-org/gitlab/-/merge_requests/000000.patch" | git am

レビューの投稿

完成したレビューは複数の方法で投稿できます:

  • /submit_review 、レビュー以外のコメントの本文中でクイックアクションを使用します。
  • レビューの完了 を選択し、モーダルウィンドウの下部にあるレビューの送信を選択します。モーダルウィンドウでは、サマリーコメントを入力し、マージリクエストを承認し、クイックアクションを含めることができます:

    Finish review with comment

レビューを投稿すると、GitLab:

  • レビューのコメントを公開します。
  • マージリクエストのすべての通知可能なユーザーに、あなたのレビューコメントを添付したメールを送信します。このメールに返信すると、マージリクエストに新しいコメントが作成されます。
  • レビューコメントに追加したクイックアクションを実行します。
  • オプションです。マージリクエストを承認します。

コメント付きでスレッドを解決または未解決にします。

レビュアーコメントは、解決可能なスレッドを解決したり、解決しなかったりすることもできます。コメントに返信するときにスレッドを解決または解決解除するには:

  1. コメントテキストエリアにコメントを書いてください。
  2. スレッドを解決するを選択またはクリアします。
  3. コメントを追加する」または「レビューに追加する」を選択します。

保留中のコメントには、コメントが公開されたときに実行されるアクションに関する情報が表示されます:

  • {チェック-丸で囲まれた}スレッドが解決されました。
  • {チェック・サークル}スレッドは未解決のままです。

新しいコメントを追加

進行中のレビューがある場合、「概要」タブから「レビューに追加」を選択してコメントを追加することもできます:

New thread

レビュアー用承認ルール情報

新規または既存のマージリクエストでレビュアーフィールドを編集するとき、GitLab はそれぞれの提案されたレビュアー名の下に一致する承認ルールの名前を表示します。コードオーナーはグループの詳細なしでCodeowner として表示されます。

この例では、新しいマージリクエストを作成するときのレビュアーと承認ルールを示しています:

Reviewer approval rules in new/edit form

この例はマージリクエストサイドバーにレビュアーと承認ルールを表示します:

Reviewer approval rules in sidebar

新規レビューのリクエスト

レビュアーがマージリクエストのレビューを完了した後、マージリクエストの作成者はレビュアーに新しいレビューをリクエストすることができます:

  1. マージリクエストの右サイドバーが折りたたまれている場合、{chevron-double-lg-left}を選択してサイドバーを拡張してください。サイドバーの展開アイコンを選択して展開します。
  2. レビュアーセクションで、レビュアー名の横にあるレビュー再要求アイコン({redo})を選択します。

GitLab はレビュアーに新しいTo-Do アイテムを作成し、通知メールを送ります。

複数行へのコメント

diffにコメントする際、どのコードのどの行を参照するかを選択することができます:

Comment on any diff file line

  • この行にコメントを追加({comment}) をガターにドラッグすると、diff 内の行がハイライトされます。GitLab は diff の行を展開し、コメントボックスを表示します。
  • ガターでAdd a comment to this line({comment}) を選択してコメントを開始したら、Commenting on linesのセレクトボックスでコメントが参照する最初の行番号を選択します。別の開始行を選択しない限り、新しいコメントのデフォルトは 1 行コメントです。

複数行コメントはコメント本文の上に行番号が表示されます:

Multiline comment selection displayed above comment

プロジェクトレベルでのマージリクエストの一括編集

少なくとも Developer ロールを持つユーザーはマージリクエストを管理できます。

プロジェクトでマージリクエストを一括編集する場合、以下の属性を編集できます:

  • ステータス (オープン/クローズ)
  • Assignee
  • Milestone
  • ラベル
  • サブスクリプション

複数のプロジェクトのマージリクエストを同時に更新します:

  1. プロジェクトで、コード > マージリクエストに進みます。
  2. 一括編集を選択します。画面の右側に編集可能なフィールドのあるサイドバーが表示されます。
  3. 編集したいマージリクエストの横にあるチェックボックスを選択します。
  4. サイドバーから適切なフィールドとその値を選択します。
  5. Update allを選択します。

グループレベルでのマージリクエストの一括編集

少なくとも Developer ロールを持つユーザーはマージリクエストを管理できます。

グループでマージリクエストを一括編集する場合、以下の属性を編集できます:

  • Milestone
  • ラベル

複数のグループマージリクエストを同時に更新します:

  1. グループで、[コード] > [マージリクエスト]に進みます。
  2. 一括編集を選択します。画面の右側に編集可能なフィールドのあるサイドバーが表示されます。
  3. 編集したいマージリクエストの横にあるチェックボックスを選択します。
  4. サイドバーから適切なフィールドとその値を選択します。
  5. Update allを選択します。

関連する機能

これらの機能はマージリクエストに関連しています:

トラブルシューティング

マージリクエストで期待通りにいかないことがあります。トラブルシューティングの手順をいくつか紹介します。

マージリクエストがパイプラインステータスを取得できません。

これは、Sidekiqが変更を十分に速く拾えない場合に発生する可能性があります。

Sidekiq

SidekiqはCIの状態変更を十分に速く処理しませんでした。数秒待てば、状態は自動的に更新されるはずです。

バグ

以下が発生した場合、マージリクエストパイプラインのステータスを取得できません:

  1. マージリクエストが作成されました。
  2. マージリクエストがクローズされました。
  3. プロジェクトに変更が加えられました。
  4. マージリクエストが再開されました。

パイプラインステータスを適切に取得できるようにするには、マージリクエストをいったん閉じて、再度開いてください。

ヒント

コマンドラインでのマージリクエストをより効率的に行うためのヒントをいくつか紹介します。

ローカルチェックアウト用にブランチ名をコピーします

マージリクエストサイドバーには、このマージリクエストの変更に貢献したソースブランチのブランチリファレンスが表示されます。

ブランチの参照をクリップボードにコピーするには、右サイドバーのブランチ名のコピーボタン({copy-to-clipboard}) を選択してください。これを使用して、コマンドラインからgit checkout <branch-name>を実行し、ブランチを内部でチェックアウトします。

head ref を使って、マージリクエストを内部でチェックアウトします。

マージリクエストにはリポジトリのすべての履歴と、マージリクエストに関連するブランチに追加されたコミットが含まれます。マージリクエストをローカルでチェックアウトする方法をいくつか紹介します。

ソースプロジェクトがターゲットプロジェクトのフォーク(非公開フォークであっても)であっても、マージリクエストをローカルでチェックアウトすることができます。

これはマージリクエストhead ref (refs/merge-requests/:iid/head) に依存します。ブランチの代わりに ID を使ってマージリクエストをチェックアウトできます。

GitLab 13.4 で導入された、マージリクエストがクローズまたはマージされてから 14 日後にマージリクエスト ref はhead 削除さ headれます。これは、head マージリクエストがマージリクエストリファレンスからローカルチェックアウトできなくなることを意味 headします。マージリクエストはまだ再オープンできます。マージリクエストのブランチが存在する場合、そのブランチは影響を受けないのでチェックアウトできます。

Git エイリアスを追加してローカルにチェックアウト

~/.gitconfig に次のエイリアスを追加します:

[alias]
    mr = !sh -c 'git fetch $1 merge-requests/$2/head:mr-$1-$2 && git checkout mr-$1-$2' -

これで、どのリポジトリ、どのリモートからでも特定のマージリクエストをチェックアウトできるようになります。たとえば、GitLab に表示されている ID 5 のマージリクエストをorigin リモートからチェックアウトするには、次のようにします:

git mr origin 5

これで、マージリクエストがローカルのmr-origin-5 ブランチにフェッチされ、チェックアウトされます。

指定したリポジトリの.git/config を変更して、内部でチェックアウトします。

.git/config ファイルの GitLab リモート用のセクションを探します。以下のようになります:

[remote "origin"]
  url = https://gitlab.com/gitlab-org/gitlab-foss.git
  fetch = +refs/heads/*:refs/remotes/origin/*

このファイルを開くには

git config -e

上記のセクションに次の行を追加してください:

fetch = +refs/merge-requests/*/head:refs/remotes/origin/merge-requests/*

最終的には以下のようになります:

[remote "origin"]
  url = https://gitlab.com/gitlab-org/gitlab-foss.git
  fetch = +refs/heads/*:refs/remotes/origin/*
  fetch = +refs/merge-requests/*/head:refs/remotes/origin/merge-requests/*

これですべてのマージリクエストを取得できます:

git fetch origin

...
From https://gitlab.com/gitlab-org/gitlab-foss.git
 * [new ref]         refs/merge-requests/1/head -> origin/merge-requests/1
 * [new ref]         refs/merge-requests/2/head -> origin/merge-requests/2
...

また、特定のマージリクエストをチェックアウトすることもできます:

git checkout origin/merge-requests/1

上記はすべてgit-mr スクリプトで実行できます。

マージリクエスト数のキャッシュ

グループでは、サイドバーに未解決マージリクエストの合計カウントが表示されます。この値が 1000 より大きい場合、キャッシュされます。キャッシュされた値は数千(または数百万)に丸められ、24時間ごとに更新されます。