分享项目和群组
- Tier: Free, Premium, Ultimate
- Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
您可以通过邀请的方式分享:
- 一个项目与一个群组。
- 一个群组与另一个群组。
分享项目
当您希望一个群组能够访问您的项目时,您可以邀请该群组加入项目。群组的直接成员和继承成员将获得项目访问权限,该项目成为共享项目。
在这种情况下,继承成员是指从父群组继承到被邀请群组的成员。只有被邀请群组的成员才能访问共享项目。如果您希望被邀请群组的子群组成员也能访问项目,您必须单独邀请该子群组。
下表概述了哪些群组成员可以访问共享项目。
| 群组成员来源 | 对共享项目的访问权限 |
|---|---|
| 被邀请群组的直接成员 | 是 |
| 被邀请群组的继承成员 | 是 |
| 被邀请群组的共享成员 1 | 是 |
| 子群组的直接成员,但不是被邀请群组的成员 | 否 |
| 子群组的继承成员,但不是被邀请群组的成员 | 否 |
脚注:
- GitLab 支持将项目访问权限扩展到共享群组成员,但不推荐此方法。Epic 122 提议更改此行为,并转向使用团队模型来共享群组。
您邀请的群组的可见性级别必须至少与项目的可见性级别一样严格。例如,您可以邀请:
- 一个私有群组到私有项目。
- 一个私有群组到内部项目。
- 一个私有群组到公开项目。
- 一个内部群组到内部项目。
- 一个内部群组到公开项目。
- 一个公开群组到公开项目。
如果项目的顶级群组不允许项目在层次结构外共享,那么被邀请的群组或子群组必须在项目的命名空间中。
成员访问和角色
当您邀请一个群组到项目时,以下成员将获得项目访问权限:
- 直接群组成员。
- 继承群组成员。
- 其他与被邀请群组共享的群组成员。
每个成员的访问权限取决于:
- 他们在群组中的角色。
- 您邀请群组时选择的最大角色。
被邀请成员将保留这两个角色中较低的一个。例如,如果某成员在其群组中拥有访客角色,而您将他们的群组以维护者最大角色添加到项目中,他们在项目中仍保留访客角色。
此外:
- 在群组页面上,项目列在共享项目选项卡中。
- 在项目的成员页面上,群组列在群组选项卡中。此列表包括公共群组和私有群组。
- 在项目的成员页面上,被邀请群组的成员列在成员选项卡中。
- 在使用配额页面上,其个人资料旁边有项目邀请徽章的成员计入共享项目顶级群组的计费成员。
在 GitLab 16.11 及更高版本中, 被邀请群组的名称和成员来源在成员和群组选项卡中被隐藏, 除非满足以下条件之一:
- 被邀请群组是公共群组。
- 当前用户是被邀请群组的成员。
- 当前用户是当前群组的所有者或当前项目的维护者/所有者。
被邀请群组的名称和成员来源对没有访问被邀请群组的成员是隐藏的。 但是,即使项目维护者和所有者无法访问私有被邀请群组,他们也可以看到私有被邀请群组成员的来源。 此行为旨在帮助项目维护者和所有者更好地管理他们所拥有项目的成员资格。
示例
命名空间为 group/subgroup01/project 的项目:
- 可以与
group/subgroup02或group/subgroup01/subgroup03共享。 - 可以与
group_abc共享,除非项目的顶级群组不允许项目在层次结构外共享。
对于由 Group 1 创建的项目:
Group 1的成员可以访问该项目。Group 1的所有者可以邀请Group 2到项目中。 这样,Group 1和Group 2的成员都可以访问共享项目。
邀请群组到项目
先决条件:
- 您必须至少拥有维护者角色。
- 必须允许项目与其他群组共享。
- 您必须是所邀请群组或子群组的成员。
要邀请群组到项目:
-
在左侧边栏,选择搜索或跳转至并找到您的项目。
-
选择管理 > 成员。
-
选择邀请群组。
-
在选择要邀请的群组列表中,选择您要邀请的群组。
-
从选择最大角色列表中,选择被邀请群组成员在项目中可以拥有的角色。被邀请成员将获得以下两个角色中较低的一个:
- 您选择的最大角色
- 他们在群组中的现有角色
被邀请群组成员在项目中的角色不能高于他们在群组中的角色。有关更多信息,请参阅成员访问和角色。
-
可选。选择访问过期日期。 从该日期起,被邀请群组将无法再访问项目。
-
选择邀请。
被邀请的群组显示在群组选项卡中。 您还可以使用 REST API 来列出项目的被邀请群组。
私有群组:
- 对未授权用户隐藏。
- 在受保护分支、受保护标签和受保护环境的项目设置中显示。
成员选项卡显示:
- 直接添加到项目的成员。
- 项目加入的群组命名空间的继承成员。
除非启用了 webui_members_inherited_users 功能标志,否则被邀请群组的成员不会显示在成员选项卡中。
示例
名为 project-01 的项目有以下直接成员:
- 用户 A,所有者
- 用户 B,维护者
名为 group-01 的群组有以下直接成员:
- 用户 C,所有者
- 用户 D,维护者
- 用户 E,报告者
当 group-01 以开发者权限被邀请到 project-01 时,用户具有以下角色:
- 用户 A,所有者
- 用户 B,维护者
- 用户 C,开发者
- 用户 D,开发者
- 用户 E,报告者
当 group-01 以所有者权限被邀请到 project-01 时,用户具有以下角色:
- 用户 A,所有者
- 用户 B,维护者
- 用户 C,所有者
- 用户 D,维护者
- 用户 E,报告者
查看共享项目
共享项目是通过邀请群组操作邀请您的群组成员访问其资源的项目。
要查看与您的群组共享访问权限的项目:
- 在左侧边栏,选择搜索或跳转至并找到您的群组。
- 在群组页面上,选择共享项目选项卡。
将显示共享项目列表。 您还可以使用 REST API 来列出群组的共享项目。
防止项目与群组共享
将项目与其他群组共享会增加可以邀请更多成员到项目的用户数量。 每个(子)群组都可能成为访问权限的额外来源, 这可能会造成混乱且难以控制。
要防止项目与其他群组共享:
- 在左侧边栏,选择搜索或跳转至并找到您的群组。
- 选择设置 > 常规。
- 展开权限和群组功能部分。
- 选择**
<group_name>中的项目不能与其他群组共享**。 - 选择保存更改。
启用此设置后:
- 它适用于所有子群组,除非被群组所有者覆盖。
- 已添加到项目的群组将失去访问权限。
分享群组
当您希望另一个群组的成员能够访问您的群组时,您可以邀请该群组加入您的群组。 群组的直接成员将获得群组访问权限,该群组成为共享群组。
只有被邀请群组的直接成员才能访问共享群组,继承成员、共享成员或子群组成员则不能。要授予子群组成员访问权限,请直接邀请该子群组。
下表概述了哪些群组成员可以访问共享群组:
| 群组成员来源 | 对共享群组的访问权限 |
|---|---|
| 被邀请群组的直接成员 | 是 |
| 被邀请群组的继承成员 | 否 |
| 被邀请群组的共享成员 | 否 |
| 子群组的成员,但不是被邀请群组的成员 | 否 |
成员访问和角色
每个成员的访问权限取决于:
- 他们在被邀请群组中的角色。
- 您邀请群组时选择的最大角色。
被邀请成员将保留这两个角色中较低的一个。例如,如果某成员在其群组中拥有访客角色,而您将他们的群组以维护者最大角色邀请到另一个群组,他们在新群组中仍保留访客角色。
邀请群组到您的群组后:
- 在群组的概览页面上,此群组已共享到的群组列在共享群组选项卡中。
- 在群组的成员页面上,被邀请群组列在群组选项卡中。此列表包括公共群组和私有群组。
- 在群组的成员页面上,被邀请群组的成员列在成员选项卡中。
- 在群组的使用配额页面上,其个人资料旁边有群组邀请徽章的被邀请群组直接成员计入邀请群组的计费成员。
在 GitLab 16.11 及更高版本中, 被邀请群组的名称和成员来源在成员和群组选项卡中被隐藏, 除非满足以下条件之一:
- 被邀请群组是公共群组。
- 当前用户是被邀请群组的成员。
- 当前用户是当前群组的所有者或当前项目的维护者/所有者。
被邀请群组的名称和成员来源对没有访问被邀请群组的成员是隐藏的。 但是,即使群组所有者无法访问私有被邀请群组,他们也可以看到私有被邀请群组成员的来源。 此行为旨在帮助群组所有者更好地管理他们所拥有群组的成员资格。
示例
用户 A 是 Group 1 的直接成员,并在该群组中拥有维护者角色。
Group 2 以开发者角色邀请 Group 1。
用户 A 在 Group 2 中拥有开发者角色。
用户 B 是 Group 1 的继承成员。当 Group 1 被邀请时,该用户无法访问 Group 2。
邀请群组到群组
与邀请群组到项目类似,您可以将一个群组邀请到另一个群组。
先决条件:
- 您必须是所邀请和邀请群组的成员。
要将群组邀请到您的群组:
-
在左侧边栏,选择搜索或跳转至并找到您的群组。
-
选择管理 > 成员。
-
选择邀请群组。
-
在选择要邀请的群组列表中,选择您要邀请的群组。
-
从选择最大角色列表中,选择被邀请群组成员在群组中可以拥有的角色。被邀请成员将获得以下两个角色中较低的一个:
- 您选择的最大角色
- 他们在被邀请群组中的现有角色
被邀请成员在群组中的角色不能高于他们在被邀请群组中的角色。有关更多信息,请参阅成员访问和角色。
-
可选。选择访问过期日期。 从该日期起,被邀请群组将无法再访问群组。
-
选择邀请。
移除被邀请群组
要移除被邀请群组:
- 在左侧边栏,选择搜索或跳转至并找到您的群组。
- 选择管理 > 成员。
- 选择群组选项卡。
- 在要移除的群组右侧,选择移除群组( )。
当您从群组中移除被邀请群组时:
- 被邀请群组的所有直接成员将失去对您群组的访问权限。
- 被邀请群组的成员不再计入您群组的计费成员。
查看共享群组
共享群组是通过邀请群组操作邀请您的群组成员访问其资源的群组。
要查看与您的群组共享访问权限的群组:
- 在左侧边栏,选择搜索或跳转至并找到您的群组。
- 在群组页面上,选择共享群组选项卡。
将显示共享群组列表。 您还可以使用 REST API 来列出群组的共享群组。
防止在群组层次结构外邀请群组
您可以配置顶级群组,使其子群组和项目 无法邀请顶级群组层次结构外的其他群组。 此选项仅适用于顶级群组。
例如,在以下群组和项目层次结构中:
- 动物 > 狗 > 狗项目
- 动物 > 猫
- 植物 > 树
如果您为动物群组防止在层次结构外邀请群组:
- 狗可以邀请猫群组。
- 狗不能邀请树群组。
- 狗项目可以邀请猫群组。
- 狗项目不能邀请树群组。
要防止在群组层次结构外邀请群组:
- 在左侧边栏,选择搜索或跳转至并找到您的群组。
- 选择设置 > 常规。
- 展开权限和群组功能。
- 选择成员不能邀请
<group_name>及其子群组外的群组。 - 选择保存更改。
设置群组进行协作
如果您打算与外部用户在群组中的项目上进行协作,请考虑以下最佳实践:
- 根据组织需求逻辑地组织您的群组和子群组。避免创建不必要的群组。
- 如果您有大量用户需要管理,考虑将用户组织在与项目群组分开的群组中。将这些用户群组共享到它们需要访问的群组和项目中。
- 仔细考虑您邀请到项目中的群组。只邀请需要访问的群组,以防止过度共享并维护安全性。
- 当您邀请群组时:
- 适当设置最大角色。最好分配所需的最小权限,而不是默认使用最高角色。
- 被邀请群组的子群组成员不会获得项目访问权限。您可能更愿意单独邀请子群组。
- 检查属于多个具有项目访问权限群组的用户的最大角色。为防止意外的高权限,您可能需要更改用户的角色。
- 定期审查对共享项目的群组访问权限并酌情更新。如果群组不再需要访问项目,请移除它。