Help us learn about your current experience with the documentation. Take the survey.

合并请求依赖

  • Tier: Premium, Ultimate
  • Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated

一个功能可能跨越多个合并请求,分布在多个项目中,工作的合并顺序可能很重要。当需要按特定顺序合并工作时,请使用合并请求依赖。一些示例:

  • 确保必需库的更改在导入该库的项目更改之前合并。
  • 防止仅包含文档的合并请求在功能工作本身合并之前被合并。
  • 要求更新权限矩阵的合并请求先合并,然后再合并尚未获得正确权限的人员的工作。

如果你的项目 me/myexample 导入了来自 myfriend/library 的库,当 myfriend/library 发布新功能时,你应该更新你的项目。如果你在 myfriend/library 添加新功能之前合并了 me/myexample 的更改,你将破坏项目中的默认分支。合并请求依赖可以防止你的工作过早合并:

%%{init: { "fontFamily": "GitLab Sans" }}%%

graph TB
  accTitle: 合并请求依赖
  accDescr: 显示合并请求依赖如何防止工作过早合并。
  A['me/myexample' project]
  B['myfriend/library' project]
  C[Merge request #1:<br>Create new version 2.5]
  D[Merge request #2:<br>Add version 2.5<br>to build]
  A-->|contains| D
  B---->|contains| C
  D-.->|depends on| C
  C-.->|blocks| D

你可以将 me/myexample 的合并请求标记为 草稿,并在评论中解释原因。这种方法是手动的,无法扩展,特别是当你的合并请求依赖于不同项目中的其他合并请求时。相反,你应该:

  • 使用 草稿就绪 状态跟踪单个合并请求的准备情况。
  • 使用合并请求依赖强制执行合并请求的合并顺序。

合并请求依赖是 GitLab Premium 的功能,但 GitLab 仅对依赖的合并请求强制执行此限制:

  • GitLab Premium 项目的合并请求可以依赖于任何其他合并请求,即使在 GitLab Free 项目中也是如此。
  • GitLab Free 项目的合并请求不能依赖于其他合并请求。

嵌套依赖

GitLab 16.7 及更高版本支持间接的嵌套依赖。一个合并请求最多可以有 10 个阻塞项,反过来它可以阻塞最多 10 个其他合并请求。在此示例中,myfriend/library!10 依赖于 herfriend/another-lib!1,而后者又依赖于 mycorp/example!100

%%{init: { "fontFamily": "GitLab Sans" }}%%

graph LR;
    accTitle: 合并请求依赖链
    accDescr: 流程图显示合并请求 A 如何依赖于合并请求 B,而合并请求 B 又依赖于合并请求 C
    A[myfriend/library!10]-->|depends on| B[herfriend/another-lib!1]
    B-->|depends on| C[mycorp/example!100]

嵌套依赖不会在 GitLab UI 中显示,但 UI 支持已在 epic 5308 中提出。

合并请求不能依赖于自身(自引用),但可以创建循环依赖。

查看合并请求的依赖

如果一个合并请求依赖于另一个合并请求,合并请求报告部分会显示有关依赖的信息:

合并请求小部件中的依赖项

要在合并请求上查看依赖信息:

  1. 在左侧边栏,选择 搜索或跳转 并找到你的项目。
  2. 选择 代码 > 合并请求 并识别你的合并请求。
  3. 滚动到合并请求报告区域。依赖的合并请求会显示有关设置的依赖总数的信息,例如 依赖于 1 个合并请求已合并
  4. 选择 展开 以查看每个依赖的标题、里程碑、指派人和管道状态。

直到你的合并请求的所有依赖都合并后,你的合并请求才能合并。消息 合并被阻止:只有在上述项目解决后才能合并 会显示。

已关闭的合并请求

已关闭的合并请求仍然会阻止其依赖项的合并,因为合并请求可以在不合并其计划工作的情况下关闭。如果合并请求关闭且依赖不再相关, 请将其作为依赖项移除,以解除对依赖合并请求的阻塞。

创建新的依赖合并请求

当你创建新的合并请求时,可以防止它在其他特定工作合并之前合并。即使合并请求在不同的项目中,此依赖项也有效。

先决条件:

  • 你必须至少拥有 Developer 角色,或者有权限在项目中创建合并请求。
  • 依赖的合并请求必须在 Premium 或 Ultimate 层级的项目中。

要创建新的合并请求并将其标记为依赖于另一个:

  1. 创建新的合并请求
  2. 合并请求依赖 中,粘贴应在当前工作之前合并的合并请求的引用或完整 URL。引用的格式为 path/to/project!merge_request_id
  3. 选择 创建合并请求

编辑合并请求以添加依赖

你可以编辑现有的合并请求并将其标记为依赖于另一个。

先决条件:

  • 你必须至少拥有 Developer 角色,或者有权限在项目中编辑合并请求。

操作步骤:

  1. 在左侧边栏,选择 搜索或跳转 并找到你的项目。
  2. 选择 代码 > 合并请求 并识别你的合并请求。
  3. 选择 编辑
  4. 合并请求依赖 中,粘贴应在当前工作之前合并的合并请求的引用或完整 URL。引用的格式为 path/to/project!merge_request_id

从合并请求中移除依赖

你可以编辑依赖的合并请求并移除依赖。

先决条件:

  • 你必须拥有允许编辑合并请求的项目角色。
  1. 在左侧边栏,选择 搜索或跳转 并找到你的项目。

  2. 选择 代码 > 合并请求 并识别你的合并请求。

  3. 选择 编辑

  4. 滚动到 合并请求依赖,并在要移除的每个依赖的引用旁边选择 移除

    你无权查看的合并请求依赖显示为 1 个无法访问的合并请求。你仍然可以移除该依赖。

  5. 选择 保存更改

故障排除

在项目导入或导出时保留依赖

在导入或导出项目时,依赖项不会被保留。有关更多信息,请参阅 问题 #12549