审核合并请求

  • 引入于 13.5 版本
  • 功能标志移除于 13.9 版本

合并请求是对极狐GitLab 项目中的文件进行更改的主要方法。创建并提交合并请求 提出更改建议。您的团队在您的合并请求上留下评论,并提出代码建议,您可以从用户界面接受。当您的工作被审核时,您的团队成员可以选择接受或拒绝它。

您可以从极狐GitLab 界面查看合并请求。如果您安装了极狐GitLab Workflow VS Code 扩展,您还可以在 Visual Studio Code 中查看合并请求。

推荐审核者

引入于 15.4 版本。

极狐GitLab 可以推荐审核者。使用合并请求中的变更和项目的贡献图,机器学习建议会出现在右侧栏的审核者部分。

Suggested Reviewers

此功能目前处于 Open Beta 状态。

有关详细信息,请参阅推荐审核者的数据使用

启用推荐审核者

项目维护者或所有者可以通过访问项目设置,来启用推荐审核者功能。

启用推荐审核者功能,会触发极狐GitLab 为您的项目创建用于生成审核者的机器学习模型。您的项目越大,此过程花费的时间就越长。通常,模型会在几个小时内准备好生成建议。

启用该功能后无需任何操作。模型准备就绪后,在有新提交的合并请求中,建议会出现在右侧栏中的审核者下拉列表。

审核合并请求

当您查看合并请求时,您可以创建仅对您可见的评论。准备就绪后,您可以在一个操作中将它们一起发布。 开始您的审核:

  1. 转到您要查看的合并请求,然后选择 变更 选项卡。
  2. 选择装订线中的 评论 图标以展开差异行并显示评论框。在 13.2 及更高版本中,您可以选择多行
  3. 在文本区域中,写下您的第一条评论,然后在您的评论下方选择 开始评论
  4. 继续为代码行添加评论。在每条评论之后,选择 添加到评论。在您提交评审之前,评论仅对您可见。
  5. (可选)您可以在审核评论中使用快速操作。评论显示发布后要执行的操作,但在您提交评论之前不会执行这些操作。
  6. 审核完成后,您可以提交审核。您的评论现在可见,并且您的评论中包含的任何快速操作 都会执行。

在 13.10 及更高版本中,如果您核准合并请求 并显示在审核者列表中,则在您的名称旁边会出现绿色复选标记

下载合并请求变更作为差异文件

将包含在合并请求中的变更作为差异文件下载:

  1. 在顶部栏中,选择 主菜单 > 项目 并找到您的项目。
  2. 在左侧边栏中,选择 合并请求
  3. 选择您的合并请求。
  4. 在右上角,选择 代码 > 文本差异

如果您知道合并请求的 URL,您还可以通过将 .diff 附加到 URL,从命令行下载差异。以下示例表示如何下载合并请求 000000 的差异文件:

https://jihulab.com/gitlab-cn/gitlab/-/merge_requests/000000.diff

要在单行 CLI 命令中下载和应用差异文件:

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

下载合并请求变更作为补丁文件

将包含在合并请求中的变更作为补丁文件下载:

  1. 在顶部栏中,选择 主菜单 > 项目 并找到您的项目。
  2. 在左侧边栏中,选择 合并请求
  3. 选择您的合并请求。
  4. 在右上角,选择 代码 > 电子邮件补丁

如果您知道合并请求的 URL,您还可以通过将 .patch 附加到 URL,从命令行下载补丁。以下示例表示如何下载合并请求 000000 的补丁文件:

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

要使用 git am 在单行 CLI 命令中下载和应用补丁文件:

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

提交评审

您可以通过多种方式提交完整的评论:

  • 在非评审评论的文本中使用 /submit_review 快速操作
  • 选择 结束评审,然后选择窗口底部的 提交评审。在窗口中,您可以提供 添加评审摘要,批准合并请求,并包括快速操作:

    Finish review with comment

当您提交评论时,极狐GitLab:

  • 在您的审核中发布评论。
  • 向合并请求的每个通知用户发送一封电子邮件,并附上您的评论。回复此电子邮件会创建对合并请求的新评论。
  • 执行您添加到审核评论中的任何快速操作。
  • 可选。批准合并请求。

使用评论解决主题或取消解决主题

审核评论也可以解决或取消解决可解决的主题。 在回复评论时解决或取消解决主题:

  1. 在评论文本区域,写下您的评论。
  2. 选择或清除 解决主题
  3. 选择 立即添加评论添加到评审

待处理的评论显示有关发布评论时要采取的操作的信息:

  • 主题将被解决。
  • 主题未解决。

添加新评论

引入于 13.10 版本

如果您正在进行评论,您还可以通过选择 添加到评审,从 概览 选项卡中添加评论:

New thread

审核者的批准规则信息

  • 引入于 13.8 版本
  • 功能标志移除于 13.9 版本

在新的或现有的合并请求中编辑 审核者 字段时,极狐GitLab 会在每个建议的审核者姓名下方显示匹配的批准规则 的名称。代码所有者显示为“代码所有者”,没有群组详细信息。

此示例显示创建新合并请求时的审核者和批准规则:

Reviewer approval rules in new/edit form

此示例在合并请求侧栏中显示审核者和批准规则:

Reviewer approval rules in sidebar

请求新的审核

引入于 13.9 版本

在审核者完成他们的合并请求审核后,合并请求的作者可以向审核者请求新的审核:

  1. 如果合并请求中的右侧边栏已折叠,请单击 展开侧边栏 图标将其展开。
  2. 审核者 部分,点击审核者姓名旁边的 重新请求审核 图标 ()。

极狐GitLab 为审核者创建一个新的待办事项,并向他们发送通知电子邮件。

多行评论

  • 引入于 13.2 版本。
  • 于 13.8 版本中添加了单击和拖动功能.
  • 功能标志移除于 13.9 版本。

在评论差异时,您可以通过以下任一方式选择您的评论引用的代码行:

Comment on any diff file line

  • 在装订线中拖动 评论 图标以突出显示差异行,将展开差异行并显示一个评论框。
  • 通过选择装订线中的 评论 图标开始评论后,在 Commenting on lines 选择框中选择您的评论引用的第一行号。新评论默认为单行评论,除非您选择不同的起始行。

多行评论在评论正文上方显示评论的行号:

Multiline comment selection displayed above comment

在项目级别批量编辑合并请求

权限级别为开发者或更高的用户可以管理合并请求。

在项目中批量编辑合并请求时,您可以编辑以下属性:

  • 状态(打开/关闭)
  • 指派人
  • 里程碑
  • 标记
  • 订阅

同时更新多个项目合并请求:

  1. 在项目中,转到 合并请求
  2. 单击 编辑合并请求。屏幕右侧会出现一个侧边栏,其中包含可编辑的字段。
  3. 选中要编辑的每个合并请求旁边的复选框。
  4. 从侧栏中选择适当的字段及其值。
  5. 点击 全部更新

在群组级别批量编辑合并请求

权限级别为开发者或更高的用户可以管理合并请求。

在群组中批量编辑合并请求时,您可以编辑以下属性:

  • 里程碑
  • 标记

同时更新多个群组合并请求:

  1. 在群组中,转到 合并请求
  2. 单击 编辑合并请求。屏幕右侧会出现一个侧边栏,其中包含可编辑的字段。
  3. 选中要编辑的每个合并请求旁边的复选框。
  4. 从侧栏中选择适当的字段及其值。
  5. 点击 全部更新

故障排查

有时在合并请求中事情不会按预期进行。以下是一些故障排查步骤。

合并请求无法获取流水线状态

如果 Sidekiq 没有足够快地获取更改,则可能会发生这种情况。

Sidekiq

Sidekiq 处理 CI 状态变化的速度不够快。 请等待几秒钟,状态应该会自动更新。

Bug

发生以下情况时,无法检索合并请求流水线状态:

  1. 创建合并请求
  2. 合并请求关闭
  3. 在项目中进行了更改
  4. 合并请求重新打开

要正确检索流水线状态,请再次关闭并重新打开合并请求。

Tips

以下是一些提示,可帮助您更高效地处理命令行中的合并请求。

复制本地检出的分支名称

引入于 13.4 版本。

合并请求侧边栏包含用于为此合并请求贡献更改的源分支的分支引用。

要将分支引用复制到剪贴板,请选择右侧栏中的 复制分支名称 按钮 () 通过运行 git checkout <branch-name>,使用它从命令行在本地检出分支。

通过 head ref 在本地检出合并请求

合并请求包含来自仓库的所有历史记录,以及添加到与合并请求关联的分支的额外提交。以下是在本地检出合并请求的几种方法。

即使源项目是目标项目的派生(甚至是私有派生),您也可以在本地检出合并请求。

这依赖于可用于每个合并请求的合并请求 head ref (refs/merge-requests/:iid/head)。它允许使用其 ID 而不是其分支来检出合并请求。

引入于 13.4 版本,合并请求关闭或合并 14 天后,合并请求 head ref 被删除。这意味着合并请求不再可用于从合并请求 head 引用的本地检出。合并请求仍然可以重新打开。如果合并请求的分支存在,您仍然可以检出该分支,因为它不受影响。

通过添加 Git 别名在本地检出

将以下别名添加到您的 ~/.gitconfig 中:

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

现在您可以从任何仓库和任何远端检查特定的合并请求。例如,要从“origin”远端检查检查GitLab 中显示的 ID 为 5 的合并请求,请执行以下操作:

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 脚本完成。

缓存合并请求计数

  • 引入于 13.11 版本。
  • 功能标志移除于 14.0 版本。

在一个组中,侧边栏显示开放的合并请求的总数。如果该值大于 1000,则缓存该值。缓存值四舍五入为千(或百万)并每 24 小时更新一次。