仓库镜像

您可以将仓库镜像到外部来源或从外部来源镜像仓库。您可以选择哪个仓库作为源。分支、标签和提交会自动同步。

有几种镜像方法:

  • 推送:将仓库从极狐GitLab 镜像到其他位置。
  • 拉取:从其他位置镜像仓库。适用于专业版和旗舰版版本。
  • 双向镜像也可用,但可能会导致冲突。

在以下情况下镜像仓库:

  • 您的项目的规范版本已迁移到极狐GitLab。为了继续在其先前位置提供项目副本,请将您的极狐GitLab 仓库配置为推送镜像。您对极狐GitLab 仓库所做的更改会复制到旧位置。
  • 您的极狐GitLab 实例是私有的,但您希望开源一些项目。
  • 您已迁移到极狐GitLab,但项目的规范版本在其他地方。将您的极狐GitLab 仓库配置为其他项目的拉取镜像。您的极狐GitLab 仓库会拉取项目的提交、标签和分支的副本。它们可以在极狐GitLab 上使用。

以下情况不支持:

  • SCP 风格的 URL。实现 SCP 风格 URL 的工作正在进行中。有关更多信息及其进展,请参阅议题 18993
  • 通过哑 HTTP 协议镜像仓库。

创建仓库镜像

先决条件:

  • 您必须至少具有项目的维护者角色。
  • 如果您的镜像通过 ssh:// 连接,主机密钥必须在服务器上可检测到,或者您必须有密钥的本地副本。
  1. 在左侧边栏,选择搜索或转到并找到您的项目。
  2. 选择设置 > 仓库
  3. 展开镜像仓库
  4. 选择添加新镜像
  5. 输入Git 仓库 URL。出于安全原因,原始仓库的 URL 仅对具有维护者角色或镜像项目所有者角色的用户显示。
  6. 选择镜像方向
  7. 如果您输入了 ssh:// URL,请选择:
    • 检测主机密钥:极狐GitLab 从服务器获取主机密钥并显示指纹。
    • 手动输入主机密钥,并在SSH 主机密钥中输入主机密钥。

    镜像仓库时,极狐GitLab 确认至少一个存储的主机密钥匹配后再连接。此检查可以保护您的镜像免受恶意代码注入,或防止您的密码被盗。

  8. 选择身份验证方法。有关更多信息,请参阅镜像的身份验证方法
  9. 如果您使用 SSH 主机密钥进行身份验证,请验证主机密钥以确保其正确。
  10. 为防止在分支偏离时强制推送,请选择保留偏离的分支
  11. 可选。要限制镜像的分支数量,请选择仅镜像受保护的分支或在镜像特定分支中输入正则表达式。
  12. 选择镜像仓库

如果您选择 SSH 公钥 作为身份验证方法,极狐GitLab 会为您的极狐GitLab 仓库生成一个公钥。您必须将此密钥提供给非极狐GitLab 服务器。有关更多信息,请参阅获取您的 SSH 公钥

仅镜像受保护的分支

您可以选择仅镜像镜像项目中的受保护分支,无论是从远程仓库还是到远程仓库。对于拉取镜像,镜像项目中的非受保护分支不会被镜像,并且可能会偏离。

要使用此选项,请在创建仓库镜像时选择仅镜像受保护的分支

镜像特定分支

  • 在 GitLab 15.8 中引入的 API 选项中,使用正则表达式匹配分支进行镜像,并带有名为 mirror_only_branches_match_regex标志。默认情况下禁用。
  • 在 GitLab 15.9 中引入的项目设置选项。
  • 在 GitLab 16.0 中默认启用
  • 在 GitLab 16.2 中普遍可用。移除了 mirror_only_branches_match_regex 特性标志。

要仅镜像名称匹配re2 正则表达式的分支,请在镜像特定分支字段中输入正则表达式。名称不匹配正则表达式的分支不会被镜像。

更新镜像

当镜像仓库更新时,所有新的分支、标签和提交都会显示在项目的活动提要中。极狐GitLab 上的仓库镜像会自动更新。您也可以手动触发更新:

  • 在 GitLab.com 上最多每五分钟一次。
  • 根据私有化部署实例上管理员设置的拉取镜像间隔限制

注意: 极狐GitLab 静默模式会禁用推送和拉取更新。

强制更新

虽然镜像计划自动更新,但您可以强制立即更新,除非:

先决条件:

  • 您必须至少具有项目的维护者角色。
  1. 在左侧边栏,选择搜索或转到并找到您的项目。
  2. 选择设置 > 仓库
  3. 展开镜像仓库
  4. 滚动到镜像的仓库并找到要更新的镜像。
  5. 选择立即更新 ): 仓库镜像强制更新用户界面

镜像的身份验证方法

创建镜像时,您必须为其配置身份验证方法。极狐GitLab 支持以下身份验证方法:

对于项目访问令牌组访问令牌,使用用户名(而不是令牌名称)和令牌作为密码。

SSH 身份验证

SSH 身份验证是相互的:

  • 您必须向服务器证明您有权访问仓库。
  • 服务器也必须向您证明它是它声称的身份。

对于 SSH 身份验证,您提供您的凭据作为密码或_公钥_。其他仓库所在的服务器提供其凭据作为_主机密钥_。您必须手动验证此主机密钥的指纹

如果您通过 SSH(使用 ssh:// URL)进行镜像,可以使用以下方式进行身份验证:

  • 基于密码的身份验证,就像通过 HTTPS 一样。
  • 公钥身份验证。这种方法通常比密码身份验证更安全,尤其是当其他仓库支持部署密钥时。

获取您的 SSH 公钥

当您镜像仓库并选择SSH 公钥作为身份验证方法时,极狐GitLab 会为您生成一个公钥。非极狐GitLab 服务器需要此密钥来与您的极狐GitLab 仓库建立信任。要复制您的 SSH 公钥:

  1. 在左侧边栏,选择搜索或转到并找到您的项目。
  2. 选择设置 > 仓库
  3. 展开镜像仓库
  4. 滚动到镜像的仓库
  5. 找到正确的仓库,并选择复制 SSH 公钥 )。
  6. 将公钥添加到其他仓库的配置中:
    • 如果其他仓库托管在极狐GitLab 上,请将公钥添加为部署密钥
    • 如果其他仓库托管在其他地方,请将密钥添加到您的用户的 authorized_keys 文件中。将整个公钥粘贴到文件中的一行并保存。

如果您必须随时更改密钥,可以删除并重新添加镜像以生成新密钥。使用新密钥更新其他仓库以保持镜像运行。

注意: 生成的密钥存储在极狐GitLab 数据库中,而不是文件系统中。因此,镜像的 SSH 公钥身份验证不能在预接收钩子中使用。

验证主机密钥

使用主机密钥时,请始终验证指纹是否与您预期的匹配。极狐GitLab.com 和其他代码托管站点会发布其指纹供您检查:

其他提供商各不相同。如果您:

  • 运行私有化部署极狐GitLab。
  • 拥有其他仓库服务器的访问权限。

可以使用以下命令安全地收集密钥指纹:

$ cat /etc/ssh/ssh_host*pub | ssh-keygen -E md5 -l -f -
256 MD5:f4:28:9f:23:99:15:21:1b:bf:ed:1f:8e:a0:76:b2:9d root@example.com (ECDSA)
256 MD5:e6:eb:45:8a:3c:59:35:5f:e9:5b:80:12:be:7e:22:73 root@example.com (ED25519)
2048 MD5:3f:72:be:3d:62:03:5c:62:83:e8:6e:14:34:3a:85:1d root@example.com (RSA)

旧版本的 SSH 可能需要您从命令中删除 -E md5

相关主题