迁移到 Secure Source Manager

本指南介绍了如何将 Git 代码库(包括其所有信息)从 Google 的 Cloud Source Repositories (CSR) 迁移到 Secure Source Manager (SSM)。此迁移使用标准 Git 命令来克隆和推送代码库数据。

前提条件

在开始迁移之前,请确保满足以下前提条件:

  • 权限:用户或服务账号必须拥有以下权限才能执行迁移:
    • source.repos.get,可在源 CSR 代码库的 roles/source.reader 角色中获取
    • securesourcemanager.instances.access(在 roles/securesourcemanager.instanceAccessor 角色中提供)和 securesourcemanager.repositories.fetch(在 roles/securesourcemanager.repoWriter 角色中提供)。如果您要创建新代码库,请参阅创建代码库
  • Git 客户端:您需要一台安装了 Git 命令行工具的计算机。
  • Google Cloud SDK:如需在使用 HTTPS 时进行身份验证,您必须在安装 Git 工具的同一台计算机上安装 395.0.0 版或更高版本。如果您没有 Google Cloud SDK,则必须使用 SSH 密钥连接到 CSR 和 SSM。
  • SSM 实例:确保您可以从计算机访问 SSM 实例。如果您的实例是使用 Private Service Connect 配置的,请参阅访问专用实例,了解访问详情。
  • 本地存储空间:您需要有足够的本地磁盘可用空间来临时存储要迁移的仓库的克隆。

迁移步骤

迁移过程包括将整个代码库从 CSR 克隆到本地计算机,然后将克隆推送到 SSM 代码库。

确定 CSR、SSM 代码库的访问正文和方法

当您以用户正文身份进行身份验证时,可以使用 HTTP 或 SSH 传输方式连接到 CSR;当您以服务账号身份进行身份验证时,可以使用 HTTP 传输方式连接到 CSR。您可以使用 HTTP 或 SSH 传输方式,以用户或服务账号正文的身份通过 SSM 进行连接和身份验证。

您无需在 CSR 和 SSM 中使用相同的传输或正文。确定您将为每个平台使用的正文和传输。如需详细了解如何模拟服务账号,请参阅服务账号模拟

确保 CSR 代码库为只读

本迁移指南不使用自动镜像或同步。 因此,请确保在迁移期间或之后没有人写入 CSR 代码库。更新 IAM 权限,使任何用户在代码库中都只拥有 roles/source.reader 角色。或者,与用户协调,在迁移期间停止所有提交。

创建 Secure Source Manager 代码库

如果管理员已为您创建代码库,您可以跳过此步骤。

如需在 SSM 实例中创建空代码库,请按照创建新代码库指南操作。 请确保:

  • 如果使用界面,请勿选择初始化代码库,因为这会创建一个非空代码库。
  • 如果使用 Google Cloud CLI,请勿设置 --gitignores--readme--licenses 标志,因为这会创建一个非空代码库。
  • 如果使用 API,请勿设置 InitialConfiggitignoreslicensereadme 字段,因为这会创建非空代码库。

验证 SSM 代码库设置

通过检查界面或克隆代码库并运行 git show-ref 来验证代码库是否为空。如果代码库为空,则输出为空。

通过检查界面或使用 API 确保没有有效的分支保护规则。不应有任何规则,或者应停用所有规则,以防止阻止迁移。

确保本地和远程磁盘空间

在克隆 CSR 代码库之前,请先确定其总大小。运行 gcloud source repos describe <var>CSR_REPO_NAME</var>。此命令显示了代码库中的总字节数。如需评估 Linux 系统上的可用磁盘空间,请运行 df . 以查看当前目录中的可用字节数。

SSM 的默认限制为每个实例 100 GB 的存储空间。在克隆 CSR 代码库之前,请验证该代码库是否适合。

克隆 CSR 代码库

将完整的代码库历史记录从 CSR 克隆到本地计算机。

  1. 前往您要临时存储代码库的本地目录。
  2. 克隆代码库: sh git clone <var>CSR_REPO_URL</var> --mirror

此命令会创建一个裸克隆,该克隆经过优化,可将整个代码库内容推送到另一个远程代码库。您会发现,该目录仅包含 configHEAD 等文件,而不是您的代码库内容。这是预期行为;所有代码库内容都已克隆并位于 objects 目录和其他目录中,但没有工作副本。

将 Secure Source Manager 代码库添加为新的远程代码库

运行以下命令:

git remote add ssm <var>SSM_REPOSITORY_URL</var>

将完整代码库推送到 Secure Source Manager

将本地克隆中的所有分支、标记和引用推送到 SSM 远程代码库:

git push --mirror ssm

验证

推送操作完成后,将 SSM 仓库克隆到其他目录。然后,比较代码库的 CSR 和 SSM 副本:

  • 分支数量:在每个代码库中运行 git branch -r,并验证分支数量是否相同。在 Linux 或 macOS 系统上,将命令通过管道传输到 wc -l 会统计输出的行数。
  • 标记数量:在每个代码库中运行 git tag,并验证标记数量是否相同。在 Linux 或 macOS 系统上,将命令通过管道传输到 wc -l 可统计输出的行数。
  • HEAD 提交:在每个代码库中运行 git rev-parse HEAD,并验证提交哈希是否相等。
  • 提交次数:在每个代码库中运行 git rev-list --all --count,并验证提交次数是否相同。

清理

  • 如果您在迁移期间模拟了某个服务账号,请运行 gcloud config set account 以重置您的凭据。
  • 如果您停用了分支保护规则,请在 SSM 代码库中重新启用分支保护规则
  • 从用于迁移的计算机中移除 CSR 代码库的裸副本。
  • 删除原始 CSR 代码库。

后续步骤