跳至主要内容

将存储库从 GitHub Enterprise Server 迁移到 GitHub Enterprise Cloud

您可以使用 GitHub CLI 或 API 将存储库从 GitHub Enterprise Server 迁移到 GitHub Enterprise Cloud。

工具导航

关于使用 GitHub Enterprise Importer 进行存储库迁移

您可以使用 GitHub CLI 或 API 运行迁移。

GitHub CLI 简化了迁移过程,建议大多数客户使用。具有大量自定义需求的高级客户可以使用 API 来构建他们自己与 GitHub Enterprise Importer 的集成。

如果您选择使用 API,则需要编写自己的脚本或使用像 Insomnia 这样的 HTTP 客户端。您可以在“REST API 入门”和“使用 GraphQL 形成调用”中了解有关 GitHub API 入门的更多信息。

要使用 API 将存储库从 GitHub Enterprise Server 迁移到 GitHub Enterprise Cloud,您将

  1. 为源组织和目标组织创建个人访问令牌
  2. 获取 GitHub Enterprise Cloud 上目标组织的 ownerId
  3. 通过 GitHub 的 GraphQL API 设置迁移源以识别您要从中迁移的位置
  4. 对于要迁移的每个存储库,重复以下步骤。
    • 使用 GitHub Enterprise Server 实例上的 REST API 为您的存储库生成迁移存档
    • 将迁移存档上传到 GitHub 可以访问的位置
    • 使用迁移目标的 GraphQL API 启动迁移,传入您的存档 URL
    • 通过 GraphQL API 检查迁移状态
    • 验证迁移并检查错误日志

要查看使用 API 的说明,请使用页面顶部的工具切换器。

要查看使用 GitHub CLI 的说明,请使用页面顶部的工具切换器。

先决条件

  • 我们强烈建议您执行迁移试运行并在之后尽快完成生产迁移。要了解有关试运行的更多信息,请参阅“GitHub 产品之间迁移概述”。
  • 确保您了解将要迁移的数据以及 Importer 的已知支持限制。有关更多信息,请参阅“GitHub 产品之间迁移简介”。
  • 虽然不是必需的,但我们建议在生产迁移期间停止工作。Importer 不支持增量迁移,因此迁移期间发生的任何更改都不会迁移。如果您选择在生产迁移期间不停止工作,则需要手动迁移这些更改。
  • 在源组织和目标组织中,您必须是组织所有者或被授予迁移者角色。有关更多信息,请参阅“管理 GitHub 产品之间迁移的访问权限”。

  • 如果您使用的是 GitHub Enterprise Server 3.8 或更高版本,要为导出的归档文件配置 Blob 存储,则需要访问管理控制台。

步骤 1. 创建您的个人访问令牌

  1. 创建并记录一个个人访问令牌(经典),该令牌将用于对 GitHub Enterprise Cloud 上的目标组织进行身份验证,并确保该令牌满足所有要求。有关更多信息,请参阅“管理 GitHub 产品之间迁移的访问权限”。
  2. 创建并记录一个个人访问令牌,该令牌将用于对源组织进行身份验证,并确保此令牌也满足所有相同的要求。

步骤 2:获取目标组织的ownerId

作为 GitHub Enterprise Cloud 中的组织所有者,使用GetOrgInfo查询返回您希望拥有迁移存储库的组织的ownerId(也称为组织 ID)。您需要ownerId来识别您的迁移目标。

GetOrgInfo查询

query(
  $login: String!
){
  organization (login: $login)
  {
    login
    id
    name
    databaseId
  }
}
查询变量描述
login您的组织名称。

GetOrgInfo响应

{
  "data": {
    "organization": {
      "login": "Octo",
      "id": "MDEyOk9yZ2FuaXphdGlvbjU2MTA=",
      "name": "Octo-org",
      "databaseId": 5610
    }
  }
}

在此示例中,MDEyOk9yZ2FuaXphdGlvbjU2MTA=是组织 ID 或ownerId,我们将在下一步中使用它。

步骤 3:设置 Blob 存储

由于许多 GitHub Enterprise Server 实例位于防火墙后面,因此对于 GitHub Enterprise Server 3.8 或更高版本,我们使用 Blob 存储作为存储数据的中间位置,GitHub 可以访问这些数据。

您必须首先使用受支持的云提供商设置 Blob 存储,然后在 GitHub Enterprise Server 实例的管理控制台中配置您的设置。

注意:仅当您使用 GitHub Enterprise Server 3.8 或更高版本时,才需要配置 Blob 存储。如果您使用的是 GitHub Enterprise Server 3.7 或更低版本,请跳至“步骤 4:在 GitHub Enterprise Cloud 中设置迁移源”。

迁移具有大型 Git 源代码或元数据的存储库需要 Blob 存储。如果您使用的是 GitHub Enterprise Server 3.7 或更低版本,则无法执行 Git 源代码或元数据导出超过 2GB 的迁移。要执行这些迁移,请更新到 GitHub Enterprise Server 3.8 或更高版本。

使用受支持的云提供商设置 Blob 存储

GitHub CLI 支持以下 Blob 存储提供商

  • Amazon Web Services (AWS) S3
  • Azure Blob 存储

设置 AWS S3 存储桶

在 AWS 中,设置一个 S3 存储桶。有关更多信息,请参阅 AWS 文档中的创建存储桶

您还需要一个具有以下权限的 AWS 访问密钥和密钥

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucketMultipartUploads",
                "s3:AbortMultipartUpload",
                "s3:ListBucket",
                "s3:DeleteObject",
                "s3:ListMultipartUploadParts"
            ],
            "Resource": [
                "arn:aws:s3:::github-migration-bucket",
                "arn:aws:s3:::github-migration-bucket/*"
            ]
        }
    ]
}

注意

迁移完成后,GitHub Enterprise Importer 不会从 AWS 中删除您的归档文件。为了降低存储成本,我们建议您配置在一段时间后自动删除归档文件。有关更多信息,请参阅 AWS 文档中的在存储桶上设置生命周期配置

设置 Azure Blob 存储帐户

在 Azure 中,创建一个存储帐户并记下您的连接字符串。有关更多信息,请参阅 Microsoft Docs 中的管理存储帐户访问密钥

注意

迁移完成后,GitHub Enterprise Importer 不会从 Azure Blob 存储中删除您的归档文件。为了降低存储成本,我们建议您配置在一段时间后自动删除归档文件。有关更多信息,请参阅 Microsoft Docs 中的通过自动管理数据生命周期来优化成本

在 GitHub Enterprise Server 实例的管理控制台中配置 Blob 存储

设置 AWS S3 存储桶或 Azure Blob 存储帐户后,请在 GitHub Enterprise Server 实例的管理控制台中配置 Blob 存储。有关管理控制台的更多信息,请参阅“从管理控制台管理您的实例”。

  1. 在 GitHub Enterprise Server 上的管理帐户中,在任何页面右上角点击.

  2. 如果您尚未在“站点管理员”页面上,请在左上角点击**站点管理员**。

  3. 在“站点管理员”侧边栏中,点击**管理控制台**。

  4. 登录管理控制台。

  5. 在顶部导航栏中,点击**设置**。

  6. 在**迁移**下,点击**启用 GitHub 迁移**。

  7. 可选地,要导入您为 GitHub Actions 配置的存储设置,请选择**从 Actions 复制存储设置**。有关更多信息,请参阅“使用 Azure Blob 存储启用 GitHub Actions”和“使用 Amazon S3 存储启用 GitHub Actions”。

    注意

    复制存储设置后,您可能仍需要更新云存储帐户的配置才能与 GitHub Enterprise Importer 配合使用。特别是,您必须确保 GitHub 的 IP 地址已列入白名单。有关更多信息,请参阅“管理 GitHub 产品之间迁移的访问权限”。

  8. 如果您没有从 GitHub Actions 导入存储设置,请选择**Azure Blob 存储**或**Amazon S3**,并填写所需的详细信息。

    注意

    如果您使用的是 Amazon S3,则必须将“AWS 服务 URL”设置为存储桶所在 AWS 区域的标准端点。例如,如果您的存储桶位于eu-west-1区域,则“AWS 服务 URL”将为https://s3.eu-west-1.amazonaws.com。您的 GitHub Enterprise Server 实例的网络必须允许访问此主机。不支持网关端点,例如bucket.vpce-0e25b8cdd720f900e-argc85vg.s3.eu-west-1.vpce.amazonaws.com。有关网关端点的更多信息,请参阅 AWS 文档中的Amazon S3 的网关端点

  9. 点击**测试存储设置**。

  10. 点击**保存设置**。

允许网络访问

如果您已在存储帐户上配置了防火墙规则,请确保您已允许访问迁移目标的 IP 范围。请参阅“管理 GitHub 产品之间迁移的访问权限”。

步骤 4:在 GitHub Enterprise Cloud 中设置迁移源

您可以使用createMigrationSource查询设置迁移源。您需要提供从GetOrgInfo查询中收集的ownerId或组织 ID。

您的迁移源是您在 GitHub Enterprise Server 上的组织。

createMigrationSource变异

mutation createMigrationSource($name: String!, $url: String!, $ownerId: ID!) {
  createMigrationSource(input: {name: $name, url: $url, ownerId: $ownerId, type: GITHUB_ARCHIVE}) {
    migrationSource {
      id
      name
      url
      type
    }
  }
}

注意

确保对type使用GITHUB_ARCHIVE

查询变量描述
name迁移源的名称。此名称仅供您自己参考,因此您可以使用任何字符串。
ownerId您在 GitHub Enterprise Cloud 上的组织的组织 ID。
urlGitHub Enterprise Server 实例的 URL。此 URL 不需要从 GitHub Enterprise Cloud 访问。

createMigrationSource响应

{
  "data": {
    "createMigrationSource": {
      "migrationSource": {
        "id": "MS_kgDaACRjZTY5NGQ1OC1mNDkyLTQ2NjgtOGE1NS00MGUxYTdlZmQwNWQ",
        "name": "GHES Source",
        "url": "https://my-ghes-hostname.com",
        "type": "GITHUB_ARCHIVE"
      }
    }
  }
}

在此示例中,MS_kgDaACRjZTY5NGQ1OC1mNDkyLTQ2NjgtOGE1NS00MGUxYTdlZmQwNWQ是迁移源 ID,我们将在后面的步骤中使用它。

步骤 5:在您的 GitHub Enterprise Server 实例上生成迁移归档文件

您将使用 REST API 在 GitHub Enterprise Server 中启动两个“迁移”:一个用于生成存储库 Git 源代码的归档文件,另一个用于生成存储库元数据(如问题和拉取请求)的归档文件。

要生成 Git 源代码归档文件,请向https://HOSTNAME/api/v3/orgs/ORGANIZATION/migrations发送POST请求,将HOSTNAME替换为 GitHub Enterprise Server 实例的主机名,并将ORGANIZATION替换为组织的登录名。

在正文中,指定您要迁移的单个存储库。您的请求将如下所示

POST /api/v3/orgs/acme-corp/migrations HTTP/1.1
Accept: application/vnd.github+json
Authorization: Bearer <TOKEN>
Content-Type: application/json
Host: github.acmecorp.net

{
  "repositories": ["repository_to_migrate"],
  "exclude_metadata": true
}

要生成元数据归档文件,请向同一 URL 发送类似的请求,并使用以下正文

{
  "repositories": ["repository_to_migrate"],
  "exclude_git_data": true,
  "exclude_releases": false,
  "exclude_owner_projects": true
}

这两个 API 调用中的每一个都将返回一个 JSON 响应,其中包含您已启动的迁移的 ID。

HTTP/1.1 201 Created

{
  "id": 123,
  // ...
}

有关更多信息,请参阅“启动组织迁移”。

生成归档文件可能需要一段时间,具体取决于数据量。您可以定期使用“获取组织迁移状态”API 检查这两个迁移的状态,直到迁移的state更改为exported

GET /api/v3/orgs/acme-corp/migrations/123 HTTP/1.1
Accept: application/vnd.github+json
Authorization: Bearer <TOKEN>
Host: github.acmecorp.net

HTTP/1.1 200 OK
Content-Type: application/json

{
  "id": 123,
  "state": "exported",
  // ...
}

有关更多信息,请参阅“获取组织迁移状态”。

注意

如果您的迁移变为failed状态而不是exported状态,请尝试重新启动迁移。如果迁移反复失败,我们建议您使用ghe-migrator而不是 API 生成归档文件。

按照“从您的企业导出迁移数据”中的步骤操作,仅将一个存储库添加到迁移中。在流程结束时,您将拥有一个包含 Git 源代码和元数据的单个迁移归档文件,您可以转到本文中的步骤 6。

在迁移的state状态变为exported后,您可以使用“下载组织迁移存档”API获取迁移的URL。

GET /api/v3/orgs/acme-corp/migrations/123/archive HTTP/1.1
Accept: application/vnd.github+json
Authorization: Bearer <TOKEN>
Host: github.acmecorp.net

HTTP/1.1 302 Found
Location: https://media.github.acmecorp.net/migrations/123/archive/cca2ebe9-7403-4ffa-9b6a-4c9e16c94410?token=AAAAABEWE7JP4H2HACKEGMTDOYRC6

API将返回一个302 Found响应,其中包含一个Location标头,重定向到包含可下载存档的URL。下载这两个文件:一个用于Git源代码,另一个用于元数据。

有关更多信息,请参阅“下载组织迁移存档”。

两个迁移都完成后并且您已下载存档后,您可以进入下一步。

步骤 6:上传迁移存档

要将您的数据导入GitHub Enterprise Cloud,您必须使用我们的GraphQL API将每个存储库的两个存档(Git源代码和元数据)从您的机器传递到GitHub。

如果您使用的是GitHub Enterprise Server 3.7或更低版本,则必须首先为GitHub可访问的存档生成URL。大多数客户选择将存档上传到云提供商的Blob存储服务(例如Amazon S3或Azure Blob存储),然后为每个存档生成一个短生命周期的URL。

如果您使用的是GitHub Enterprise Server 3.8或更高版本,您的实例将为您上传存档并生成URL。上一步中的Location标头将返回短生命周期的URL。

您可能需要将GitHub的IP范围列入白名单。有关更多信息,请参阅“管理GitHub产品之间迁移的访问权限”。

步骤 7:开始您的存储库迁移

开始迁移时,单个存储库及其伴随数据将迁移到您标识的全新GitHub存储库中。

如果您想一次从同一源组织迁移多个存储库,您可以排队多个迁移。您可以同时运行最多5个存储库迁移。

startRepositoryMigration 变异

mutation startRepositoryMigration (
  $sourceId: ID!,
  $ownerId: ID!,
  $repositoryName: String!,
  $continueOnError: Boolean!,
  $accessToken: String!,
  $githubPat: String!,
  $gitArchiveUrl: String!,
  $metadataArchiveUrl: String!,
  $sourceRepositoryUrl: URI!,
  $targetRepoVisibility: String!
){
  startRepositoryMigration( input: {
    sourceId: $sourceId,
    ownerId: $ownerId,
    repositoryName: $repositoryName,
    continueOnError: $continueOnError,
    accessToken: $accessToken,
    githubPat: $githubPat,
    targetRepoVisibility: $targetRepoVisibility
    gitArchiveUrl: $gitArchiveUrl,
    metadataArchiveUrl: $metadataArchiveUrl,
    sourceRepositoryUrl: $sourceRepositoryUrl,
  }) {
    repositoryMigration {
      id
      migrationSource {
        id
        name
        type
      }
      sourceUrl
    }
  }
}
查询变量描述
sourceId您的迁移源id,由createMigrationSource变异返回。
ownerId您在 GitHub Enterprise Cloud 上的组织的组织 ID。
repositoryName一个自定义的唯一存储库名称,目前未被GitHub Enterprise Cloud上您组织拥有的任何存储库使用。当您的迁移完成或停止时,将在此存储库中创建一个错误日志问题。
continueOnError迁移设置,允许迁移在遇到不会导致迁移失败的错误时继续。必须为truefalse。我们强烈建议将continueOnError设置为true,以便您的迁移将继续进行,除非导入程序无法移动Git源代码或导入程序已断开连接并且无法重新连接以完成迁移。
githubPat您在GitHub Enterprise Cloud上的目标组织的个人访问令牌。
accessToken您的源的个人访问令牌。
targetRepoVisibility新存储库的可见性。必须为privatepublicinternal。如果未设置,则您的存储库将作为私有迁移。
gitArchiveUrlGitHub Enterprise Cloud可访问的Git源代码存档的URL。
metadataArchiveUrlGitHub Enterprise Cloud可访问的元数据存档的URL。
sourceRepositoryUrl您在GitHub Enterprise Server实例上的存储库的URL。这是必需的,但GitHub Enterprise Cloud不会直接与您的GitHub Enterprise Server实例通信。

有关个人访问令牌要求,请参阅“管理GitHub产品之间迁移的访问权限”。

在下一步中,您将使用startRepositoryMigration变异返回的迁移ID来检查迁移状态。

步骤 8:检查迁移状态

要检测任何迁移失败并确保您的迁移正常工作,您可以使用getMigration查询检查您的迁移状态。您还可以使用getMigrations检查多个迁移的状态。

getMigration查询将返回一个状态,让您知道迁移是queuedin progressfailed还是completed。如果您的迁移失败,导入程序将提供失败的原因。

getMigration 查询

query (
  $id: ID!
){
  node( id: $id ) {
    ... on Migration {
      id
      sourceUrl
      migrationSource {
        name
      }
      state
      failureReason
    }
  }
}
查询变量描述
id您的迁移的id,由startRepositoryMigration变异返回。

步骤 9:验证您的迁移并检查错误日志

要完成迁移,我们建议您检查“迁移日志”问题。此问题是在GitHub的目标存储库中创建的。

Screenshot of an issue with the title "Migration Log." The second comment in the issue includes logs for a migration.

最后,我们建议您审查您已迁移的存储库以进行健全性检查。

步骤 1:安装GitHub CLI的GEI扩展

如果这是您的第一次迁移,您需要安装GitHub CLI的GEI扩展。有关GitHub CLI的更多信息,请参阅“关于GitHub CLI”。

或者,您可以从github/gh-gei存储库的发布页面下载独立二进制文件。您可以直接运行二进制文件,无需gh前缀。

  1. 安装GitHub CLI。有关GitHub CLI的安装说明,请参阅GitHub CLI存储库

    注意

    您需要GitHub CLI 2.4.0或更高版本。您可以使用gh --version命令检查您已安装的版本。

  2. 安装GEI扩展。

    Shell
    gh extension install github/gh-gei
    

任何时候您需要GEI扩展的帮助,您都可以对命令使用--help标志。例如,gh gei --help将列出所有可用的命令,而gh gei migrate-repo --help将列出migrate-repo命令可用的所有选项。

步骤 2:更新GitHub CLI的GEI扩展

GEI扩展每周更新一次。要确保您使用的是最新版本,请更新扩展。

gh extension upgrade github/gh-gei

步骤 3:设置环境变量

在您可以使用GEI扩展迁移到GitHub Enterprise Cloud之前,您必须创建可以访问源组织和目标组织的个人访问令牌,然后将个人访问令牌设置为环境变量。

  1. 创建并记录一个个人访问令牌(经典),该令牌将用于对 GitHub Enterprise Cloud 上的目标组织进行身份验证,并确保该令牌满足所有要求。有关更多信息,请参阅“管理 GitHub 产品之间迁移的访问权限”。

  2. 创建并记录一个个人访问令牌,该令牌将用于对源组织进行身份验证,并确保此令牌也满足所有相同的要求。

  3. 为个人访问令牌设置环境变量,将以下命令中的TOKEN替换为您上面记录的个人访问令牌。对于目标组织,使用GH_PAT;对于源组织,使用GH_SOURCE_PAT

    • 如果您使用的是终端,请使用export命令。

      Shell
      export GH_PAT="TOKEN"
      export GH_SOURCE_PAT="TOKEN"
      
    • 如果您使用的是PowerShell,请使用$env命令。

      Shell
      $env:GH_PAT="TOKEN"
      $env:GH_SOURCE_PAT="TOKEN"
      
  4. 如果您要迁移到具有数据驻留的GitHub Enterprise Cloud,为了方便起见,请为您的企业的**基本API URL**设置一个环境变量。例如

    Shell
    export TARGET_API_URL="https://api.octocorp.ghe.com"
    

    您将在使用GitHub CLI运行的命令中使用--target-api-url选项使用此变量。

步骤 4:设置Blob存储

由于许多GitHub Enterprise Server实例位于防火墙后面,因此我们使用Blob存储作为存储GitHub可以访问的数据的中间位置。

首先,您必须使用受支持的云提供商设置Blob存储。然后,您必须在管理控制台或GitHub CLI中配置存储提供商的凭据。

使用受支持的云提供商设置 Blob 存储

GitHub CLI 支持以下 Blob 存储提供商

  • Amazon Web Services (AWS) S3
  • Azure Blob 存储

设置 AWS S3 存储桶

在 AWS 中,设置一个 S3 存储桶。有关更多信息,请参阅 AWS 文档中的创建存储桶

您还需要一个具有以下权限的 AWS 访问密钥和密钥

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject",
                "s3:ListBucketMultipartUploads",
                "s3:AbortMultipartUpload",
                "s3:ListBucket",
                "s3:DeleteObject",
                "s3:ListMultipartUploadParts"
            ],
            "Resource": [
                "arn:aws:s3:::github-migration-bucket",
                "arn:aws:s3:::github-migration-bucket/*"
            ]
        }
    ]
}

注意

迁移完成后,GitHub Enterprise Importer 不会从 AWS 中删除您的归档文件。为了降低存储成本,我们建议您配置在一段时间后自动删除归档文件。有关更多信息,请参阅 AWS 文档中的在存储桶上设置生命周期配置

设置Azure Blob存储存储帐户

在 Azure 中,创建一个存储帐户并记下您的连接字符串。有关更多信息,请参阅 Microsoft Docs 中的管理存储帐户访问密钥

注意

迁移完成后,GitHub Enterprise Importer 不会从 Azure Blob 存储中删除您的归档文件。为了降低存储成本,我们建议您配置在一段时间后自动删除归档文件。有关更多信息,请参阅 Microsoft Docs 中的通过自动管理数据生命周期来优化成本

配置您的Blob存储凭据

在您使用受支持的云提供商设置Blob存储后,您必须在GitHub中配置存储提供商的凭据

  • 如果您使用的是GitHub Enterprise Server 3.8或更高版本,请在管理控制台中配置您的凭据。
  • 如果您使用的是GitHub Enterprise Server 3.7或更低版本,请在GitHub CLI中配置凭据。

在 GitHub Enterprise Server 实例的管理控制台中配置 Blob 存储

注意

只有在您使用GitHub Enterprise Server 3.8或更高版本时,才需要在管理控制台中配置Blob存储。如果您使用的是3.7或更低版本,请改用GitHub CLI配置您的凭据。

设置 AWS S3 存储桶或 Azure Blob 存储帐户后,请在 GitHub Enterprise Server 实例的管理控制台中配置 Blob 存储。有关管理控制台的更多信息,请参阅“从管理控制台管理您的实例”。

  1. 在 GitHub Enterprise Server 上的管理帐户中,在任何页面右上角点击.

  2. 如果您尚未在“站点管理员”页面上,请在左上角点击**站点管理员**。

  3. 在“站点管理员”侧边栏中,点击**管理控制台**。

  4. 登录管理控制台。

  5. 在顶部导航栏中,点击**设置**。

  6. 在**迁移**下,点击**启用 GitHub 迁移**。

  7. 可选地,要导入您为 GitHub Actions 配置的存储设置,请选择**从 Actions 复制存储设置**。有关更多信息,请参阅“使用 Azure Blob 存储启用 GitHub Actions”和“使用 Amazon S3 存储启用 GitHub Actions”。

    注意

    复制存储设置后,您可能仍需要更新云存储帐户的配置才能与 GitHub Enterprise Importer 配合使用。特别是,您必须确保 GitHub 的 IP 地址已列入白名单。有关更多信息,请参阅“管理 GitHub 产品之间迁移的访问权限”。

  8. 如果您没有从 GitHub Actions 导入存储设置,请选择**Azure Blob 存储**或**Amazon S3**,并填写所需的详细信息。

    注意

    如果您使用的是 Amazon S3,则必须将“AWS 服务 URL”设置为存储桶所在 AWS 区域的标准端点。例如,如果您的存储桶位于eu-west-1区域,则“AWS 服务 URL”将为https://s3.eu-west-1.amazonaws.com。您的 GitHub Enterprise Server 实例的网络必须允许访问此主机。不支持网关端点,例如bucket.vpce-0e25b8cdd720f900e-argc85vg.s3.eu-west-1.vpce.amazonaws.com。有关网关端点的更多信息,请参阅 AWS 文档中的Amazon S3 的网关端点

  9. 点击**测试存储设置**。

  10. 点击**保存设置**。

在GitHub CLI中配置您的Blob存储凭据

注意

只有在您使用GitHub Enterprise Server 3.7或更低版本时,才需要在GitHub CLI中配置您的Blob存储凭据。如果您使用的是3.8或更高版本,请改用管理控制台配置Blob存储。

如果您在GitHub CLI中配置Blob存储凭据,则将无法执行Git源代码或元数据导出超过2GB的迁移。要执行这些迁移,请升级到GitHub Enterprise Server 3.8或更高版本。

在GitHub CLI中配置AWS S3凭据

当您准备好运行迁移时,您需要将您的AWS凭据提供给GitHub CLI:区域、访问密钥、密钥和会话令牌(如果需要)。您可以将它们作为参数传递,或设置名为AWS_REGIONAWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN的环境变量。

您还需要使用--aws-bucket-name参数传入S3存储桶的名称。

在GitHub CLI中配置Azure Blob存储帐户凭据

当您准备好运行迁移时,您可以将连接字符串作为参数传递到GitHub CLI中,也可以使用名为AZURE_STORAGE_CONNECTION_STRING的环境变量传递。

允许网络访问

如果您已在存储帐户上配置了防火墙规则,请确保您已允许访问迁移目标的 IP 范围。请参阅“管理 GitHub 产品之间迁移的访问权限”。

步骤 5:生成迁移脚本

如果您想一次将多个代码库迁移到 GitHub Enterprise Cloud,请使用 GitHub CLI 生成迁移脚本。生成的脚本将包含一个迁移命令列表,每个代码库一个命令。

注意

生成脚本会输出一个 PowerShell 脚本。如果您使用的是终端,则需要使用 .ps1 文件扩展名输出脚本,并为 MacLinux 安装 PowerShell 以运行它。

如果您想迁移单个代码库,请跳到下一步。

生成迁移脚本

您必须从可以访问 GitHub Enterprise Server 实例 API 的计算机执行此步骤。如果您可以通过浏览器访问您的实例,则该计算机具有正确的访问权限。

要生成迁移脚本,请运行 gh gei generate-script 命令。

对于 GitHub Enterprise Server 3.8 或更高版本,或者如果您使用的是 3.7 或更低版本以及 Azure Blob 存储,请使用以下标志

Shell
gh gei generate-script --github-source-org SOURCE \
  --github-target-org DESTINATION \
  --output FILENAME \
  --ghes-api-url GHES-API-URL

如果您使用的是 GitHub Enterprise Server 3.7 或更低版本以及 AWS S3,请使用以下标志

Shell
gh gei generate-script --github-source-org SOURCE \
  --github-target-org DESTINATION \
  --output FILENAME \
  --ghes-api-url GHES-API-URL \
  --aws-bucket-name AWS-BUCKET-NAME

占位符

将上面命令中的占位符替换为以下值。

占位符
SOURCE源组织的名称
DESTINATION目标组织的名称
FILENAME生成的迁移脚本的文件名

如果您使用的是终端,请使用 .ps1 文件扩展名,因为生成的脚本需要 PowerShell 才能运行。您可以为 MacLinux 安装 PowerShell。
GHES-API-URLGitHub Enterprise Server 实例 API 的 URL,例如 https://myghes.com/api/v3
AWS-BUCKET-NAMEAWS S3 存储桶的名称

其他参数

参数描述
--target-api-url TARGET-API-URL如果您要迁移到 GHE.com,请添加 --target-api-url TARGET-API-URL,其中 TARGET-API-URL 是您企业子域的基本 API URL。例如:https://api.octocorp.ghe.com
--no-ssl-verify如果您的 GitHub Enterprise Server 实例使用自签名或无效的 SSL 证书,请使用 --no-ssl-verify 标志。使用此标志,GitHub CLI 将仅跳过验证从您的实例提取数据时的 SSL 证书。所有其他调用都将验证 SSL。
--download-migration-logs下载每个迁移代码库的迁移日志。有关迁移日志的更多信息,请参阅“访问 GitHub Enterprise Importer 的迁移日志”。

查看迁移脚本

生成脚本后,请查看文件,并根据需要编辑脚本。

  • 如果有一些您不想迁移的代码库,请删除或注释掉相应的行。
  • 如果您希望任何代码库在目标组织中具有不同的名称,请更新相应 --target-repo 标志的值。
  • 如果您想更改新代码库的可见性,请更新相应 --target-repo-visibility 标志的值。默认情况下,脚本会设置与源代码库相同的可见性。

如果您的代码库有超过 10 GB 的发布数据,则无法迁移发布。使用 --skip-releases 标志迁移不包含发布的代码库。

如果您将 GEI 作为独立二进制文件而不是作为 GitHub CLI 的扩展下载,则需要更新生成的脚本以运行二进制文件而不是 gh gei

步骤 6:迁移代码库

您可以使用迁移脚本迁移多个代码库,或者使用 gh gei migrate-repo 命令迁移单个代码库。

当您迁移代码库时,GitHub CLI 的 GEI 扩展会执行以下步骤

  1. 连接到您的 GitHub Enterprise Server 实例并为每个代码库生成两个迁移存档,一个用于 Git 源,另一个用于元数据
  2. 将迁移存档上传到您选择的 Blob 存储提供程序
  3. 在 GitHub Enterprise Cloud 中启动您的迁移,使用存储在 Blob 存储提供程序中的存档的 URL
  4. 从您的本地计算机删除迁移存档

迁移多个代码库

如果您要从 GitHub Enterprise Server 3.7 或更早版本迁移,则在运行脚本之前,必须设置其他环境变量以对 Blob 存储提供程序进行身份验证。

  • 对于 Azure Blob 存储,请将 AZURE_STORAGE_CONNECTION_STRING 设置为 Azure 存储帐户的连接字符串。

    仅支持使用存储帐户访问密钥的连接字符串。不支持使用共享访问签名 (SAS) 的连接字符串。有关存储帐户访问密钥的更多信息,请参阅 Azure 文档中的 管理存储帐户访问密钥

  • 对于 AWS S3,请设置以下环境变量。

    • AWS_ACCESS_KEY_ID:存储桶的访问密钥 ID
    • AWS_SECRET_ACCESS_KEY:存储桶的密钥
    • AWS_REGION:存储桶所在的 AWS 区域
    • AWS_SESSION_TOKEN:会话令牌(如果您使用的是 AWS 临时凭据,请参阅 AWS 文档中的 使用临时凭据与 AWS 资源

要迁移多个代码库,请运行上面生成的脚本。将命令中的 FILENAME 替换为您在生成脚本时提供的文件名。

  • 如果您使用的是终端,请使用 ./

    Shell
    ./FILENAME
    
  • 如果您使用的是 PowerShell,请使用 .\

    Shell
    .\FILENAME
    

迁移单个代码库

您必须从可以访问 GitHub Enterprise Server 实例 API 的计算机执行此步骤。如果您可以通过浏览器访问您的实例,则该计算机具有正确的访问权限。

要迁移单个代码库,请使用 gh gei migrate-repo 命令。

如果您使用的是 GitHub Enterprise Server 3.8 或更高版本,请使用以下标志

Shell
gh gei migrate-repo --github-source-org SOURCE --source-repo CURRENT-NAME --github-target-org DESTINATION --target-repo NEW-NAME --ghes-api-url GHES-API-URL

如果您要从 GitHub Enterprise Server 3.7 或更早版本迁移,并使用 Azure Blob 存储作为您的 Blob 存储提供程序,请使用以下标志进行身份验证

Shell
gh gei migrate-repo --github-source-org SOURCE --source-repo CURRENT-NAME --github-target-org DESTINATION --target-repo NEW-NAME \
    --ghes-api-url GHES-API-URL --azure-storage-connection-string "AZURE_STORAGE_CONNECTION_STRING"

如果您要从 GitHub Enterprise Server 3.7 或更早版本迁移,并使用 Amazon S3 作为您的 Blob 存储提供程序,请使用以下标志进行身份验证

Shell
gh gei migrate-repo --github-source-org SOURCE --source-repo CURRENT-NAME --github-target-org DESTINATION --target-repo NEW-NAME \
    --ghes-api-url GHES-API-URL --aws-bucket-name "AWS-BUCKET-NAME"

占位符

将上面命令中的占位符替换为以下值。

占位符
SOURCE源组织的名称
CURRENT-NAME您要迁移的代码库的名称
DESTINATION目标组织的名称
NEW-NAME您希望迁移后的代码库具有的名称
GHES-API-URLGitHub Enterprise Server 实例 API 的 URL,例如 https://myghes.com/api/v3
AZURE_STORAGE_CONNECTION_STRINGAzure 存储帐户的连接字符串。

请确保将连接字符串用引号括起来,因为连接字符串包含 shell 可能会错误解释的字符。
AWS-BUCKET-NAMEAWS S3 存储桶的名称

其他参数

参数描述
--target-api-url TARGET-API-URL如果您要迁移到 GHE.com,请添加 --target-api-url TARGET-API-URL,其中 TARGET-API-URL 是您企业子域的基本 API URL。例如:https://api.octocorp.ghe.com
--no-ssl-verify如果您的 GitHub Enterprise Server 实例使用自签名或无效的 SSL 证书,请使用 --no-ssl-verify 标志。使用此标志,GitHub CLI 将仅跳过验证从您的实例提取数据时的 SSL 证书。所有其他调用都将验证 SSL。
--skip-releases如果您的代码库有超过 10 GB 的发布数据,则无法迁移发布。使用 --skip-releases 标志迁移不包含发布的代码库。
--target-repo-visibility TARGET-VISIBILITY代码库默认以私有可见性迁移。要设置可见性,您可以添加 --target-repo-visibility 标志,指定 privatepublicinternal。如果您要迁移到具有托管用户的企业,则公共代码库不可用。

中止迁移

如果您想取消迁移,请使用 abort-migration 命令,将 MIGRATION-ID 替换为 migrate-repo 返回的 ID。

Shell
gh gei abort-migration --migration-id MIGRATION-ID

步骤 7:验证您的迁移并检查错误日志

迁移完成后,我们建议您查看迁移日志。有关更多信息,请参阅“访问 GitHub Enterprise Importer 的迁移日志”。

我们建议您查看迁移后的代码库以进行健全性检查。

迁移完成后,我们建议您从存储容器中删除存档。如果您计划完成其他迁移,请删除 ADO2GH 扩展放置到存储容器中的存档。如果您已完成迁移,则可以删除整个容器。