关于使用 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,您需要
- 为源组织和目标组织创建个人访问令牌
- 获取 GitHub Enterprise Cloud 上目标组织的
ownerId
- 通过 GitHub.com 的 GraphQL API 设置迁移源,以标识您要迁移的来源
- 对于您要迁移的每个仓库,重复以下步骤。
- 使用 GitHub Enterprise Server 实例上的 REST API 为您的仓库生成迁移存档
- 将迁移存档上传到 GitHub.com 可以访问的位置
- 使用 GitHub.com 的 GraphQL API 启动迁移,传入您的存档 URL
- 通过 GraphQL API 检查迁移状态
- 验证迁移并检查错误日志
要查看使用 API 的说明,请使用页面顶部的工具切换器。
要查看使用 GitHub CLI 的说明,请使用页面顶部的工具切换器。
先决条件
- 我们强烈建议您进行迁移试运行,并在之后尽快完成生产迁移。要了解有关试运行的更多信息,请参阅“GitHub 产品之间迁移概述”。
- 请确保您了解将要迁移的数据以及 Importer 的已知支持限制。有关更多信息,请参阅“关于 GitHub 产品之间的迁移”。
- 虽然不是必需的,但我们建议在生产迁移期间停止工作。Importer 不支持增量迁移,因此迁移期间发生的任何更改都不会迁移。如果您选择不在生产迁移期间停止工作,则需要手动迁移这些更改。
- 在源组织和目标组织中,您必须是组织所有者或被授予迁移者角色。有关更多信息,请参阅“管理 GitHub 产品之间迁移的访问权限”。
- 如果您使用的是 GitHub Enterprise Server 3.8 或更高版本,要为导出的存档配置 Blob 存储,您需要访问管理控制台。
步骤 1. 创建您的个人访问令牌
- 创建并记录一个将用于在 GitHub Enterprise Cloud 上对目标组织进行身份验证的个人访问令牌(经典),确保令牌满足所有要求。有关更多信息,请参阅“管理 GitHub 产品之间迁移的访问权限”。
- 创建并记录一个将用于对源组织进行身份验证的个人访问令牌,确保此令牌也满足所有相同的要求。
步骤 2:获取目标组织的 ownerId
作为 GitHub Enterprise Cloud 中的组织所有者,使用 GetOrgInfo
查询返回 ownerId
(也称为组织 ID),用于您想要拥有迁移存储库的组织。您需要 ownerId
来识别您的迁移目标。
GetOrgInfo
查询
query(
$login: String!
){
organization (login: $login)
{
login
id
name
databaseId
}
}
查询变量 | 描述 |
---|---|
登录 | 您的组织名称。 |
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 中设置迁移源”。
Blob 存储是迁移具有大型 Git 源代码或元数据的存储库所必需的。如果您使用 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 存储。有关管理控制台的更多信息,请参阅“从管理控制台管理您的实例”。
-
从 GitHub Enterprise Server 上的管理帐户,在任何页面右上角点击 .
-
如果您尚未在“站点管理员”页面,请在左上角点击站点管理员。
-
在“ 站点管理员”侧边栏中,点击管理控制台。
-
登录管理控制台。
-
在顶部导航栏中,点击设置。
-
在迁移下,点击启用 GitHub 迁移。
-
可选地,要导入您为 GitHub Actions 配置的存储设置,请选择从 Actions 复制存储设置。有关更多信息,请参阅“使用 Azure Blob 存储启用 GitHub Actions”和“使用 Amazon S3 存储启用 GitHub Actions”。
注意:复制存储设置后,您可能仍然需要更新云存储帐户的配置才能与 GitHub Enterprise Importer 配合使用。特别是,您必须确保 GitHub 的 IP 地址已列入白名单。有关更多信息,请参阅“管理 GitHub 产品之间迁移的访问权限”。
-
如果您没有从 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 的网关端点。 -
点击测试存储设置。
-
点击保存设置。
步骤 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
}
}
}
注意:确保使用 GITHUB_ARCHIVE
作为 type
。
查询变量 | 描述 |
---|---|
name | 迁移源的名称。此名称仅供您自己参考,因此您可以使用任何字符串。 |
ownerId | 您在 GitHub Enterprise Cloud 上的组织的组织 ID。 |
url | GitHub 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.com。
如果您使用的是 GitHub Enterprise Server 3.7 或更低版本,您必须首先为 GitHub.com 可访问的归档生成 URL。大多数客户选择将归档上传到云提供商的 Blob 存储服务(例如 Amazon S3 或 Azure Blob Storage),然后为每个归档生成一个短期 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 | 从 createMigrationSource 突变返回的迁移源 id 。 |
ownerId | 您在 GitHub Enterprise Cloud 上的组织的组织 ID。 |
repositoryName | 自定义的唯一仓库名称,目前未被您在 GitHub Enterprise Cloud 上拥有的任何组织的仓库使用。 当您的迁移完成或停止时,将在该仓库中创建错误日志问题。 |
continueOnError | 迁移设置,允许迁移在遇到不会导致迁移失败的错误时继续。 必须为 true 或 false 。 我们强烈建议将 continueOnError 设置为 true ,以便您的迁移将继续,除非 Importer 无法移动 Git 源代码,或者 Importer 已经断开连接并且无法重新连接以完成迁移。 |
githubPat | 您在 GitHub Enterprise Cloud 上的目标组织的个人访问令牌。 |
accessToken | 您源的个人访问令牌。 |
targetRepoVisibility | 新仓库的可见性。 必须为 private 、public 或 internal 。 如果未设置,您的仓库将以私有方式迁移。 |
gitArchiveUrl | 您 Git 源代码存档的 GitHub Enterprise Cloud 可访问 URL。 |
metadataArchiveUrl | 您元数据存档的 GitHub Enterprise Cloud 可访问 URL。 |
sourceRepositoryUrl | 您在 GitHub Enterprise Server 实例上的仓库的 URL。 这是必需的,但 GitHub Enterprise Cloud 不会直接与您的 GitHub Enterprise Server 实例通信。 |
有关个人访问令牌要求,请参阅“管理 GitHub 产品之间迁移的访问权限”。
在下一步中,您将使用从 startRepositoryMigration
变异返回的迁移 ID 来检查迁移状态。
步骤 8:检查迁移状态
为了检测任何迁移失败并确保您的迁移正常工作,您可以使用 getMigration
查询检查您的迁移状态。您也可以使用 getMigrations
检查多个迁移的状态。
getMigration
查询将返回一个状态,让您知道迁移是 queued
、in progress
、failed
还是 completed
。如果您的迁移失败,Importer 将提供失败的原因。
getMigration
查询
query (
$id: ID!
){
node( id: $id ) {
... on Migration {
id
sourceUrl
migrationSource {
name
}
state
failureReason
}
}
}
查询变量 | 描述 |
---|---|
id | 您的迁移的 id ,由 startRepositoryMigration 变异 返回。 |
步骤 9:验证您的迁移并检查错误日志
为了完成您的迁移,我们建议您检查“迁移日志”问题。此问题是在目标存储库的 GitHub 中创建的。
最后,我们建议您审查您迁移的存储库以进行健全性检查。
步骤 1:安装 GitHub CLI 的 GEI 扩展
如果这是您的第一次迁移,您需要安装 GitHub CLI 的 GEI 扩展。有关 GitHub CLI 的更多信息,请参阅“关于 GitHub CLI”。
或者,您可以从 发布页面 下载 github/gh-gei
存储库的独立二进制文件。您可以直接运行二进制文件,无需 gh
前缀。
-
安装 GitHub CLI。有关 GitHub CLI 的安装说明,请参阅 GitHub CLI 存储库。
注意:您需要 GitHub CLI 2.4.0 或更高版本。您可以使用
gh --version
命令检查您安装的版本。 -
安装 GEI 扩展。
Shell gh extension install github/gh-gei
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 之前,您需要创建可以访问源组织和目标组织的个人访问令牌,然后将这些个人访问令牌设置为环境变量。
-
创建并记录一个将用于在 GitHub Enterprise Cloud 上对目标组织进行身份验证的个人访问令牌(经典),确保令牌满足所有要求。有关更多信息,请参阅“管理 GitHub 产品之间迁移的访问权限”。
-
创建并记录一个将用于对源组织进行身份验证的个人访问令牌,确保此令牌也满足所有相同的要求。
-
为个人访问令牌设置环境变量,将以下命令中的 TOKEN 替换为您上面记录的个人访问令牌。使用 `GH_PAT` 代表目标组织,`GH_SOURCE_PAT` 代表源组织。
-
如果您使用的是终端,请使用 `export` 命令。
Shell export GH_PAT="TOKEN" export GH_SOURCE_PAT="TOKEN"
export GH_PAT="TOKEN" export GH_SOURCE_PAT="TOKEN"
-
如果您使用的是 PowerShell,请使用 `$env` 命令。
Shell $env:GH_PAT="TOKEN" $env:GH_SOURCE_PAT="TOKEN"
$env:GH_PAT="TOKEN" $env:GH_SOURCE_PAT="TOKEN"
-
步骤 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 存储。有关管理控制台的更多信息,请参阅“从管理控制台管理您的实例”。
-
从 GitHub Enterprise Server 上的管理帐户,在任何页面右上角点击 .
-
如果您尚未在“站点管理员”页面,请在左上角点击站点管理员。
-
在“ 站点管理员”侧边栏中,点击管理控制台。
-
登录管理控制台。
-
在顶部导航栏中,点击设置。
-
在迁移下,点击启用 GitHub 迁移。
-
可选地,要导入您为 GitHub Actions 配置的存储设置,请选择从 Actions 复制存储设置。有关更多信息,请参阅“使用 Azure Blob 存储启用 GitHub Actions”和“使用 Amazon S3 存储启用 GitHub Actions”。
注意:复制存储设置后,您可能仍然需要更新云存储帐户的配置才能与 GitHub Enterprise Importer 配合使用。特别是,您必须确保 GitHub 的 IP 地址已列入白名单。有关更多信息,请参阅“管理 GitHub 产品之间迁移的访问权限”。
-
如果您没有从 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 的网关端点。 -
点击测试存储设置。
-
点击保存设置。
在 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 凭据
当您准备好运行迁移时,您需要向 GitHub CLI 提供您的 AWS 凭据:区域、访问密钥、密钥和会话令牌(如果需要)。您可以将它们作为参数传递,也可以设置名为 AWS_REGION
、AWS_ACCESS_KEY_ID
、AWS_SECRET_ACCESS_KEY
和 AWS_SESSION_TOKEN
的环境变量。
您还需要使用 --aws-bucket-name
参数传递 S3 存储桶的名称。
在 GitHub CLI 中配置 Azure Blob 存储帐户凭据
当您准备好运行迁移时,您可以将连接字符串作为参数传递给 GitHub CLI,也可以使用名为 AZURE_STORAGE_CONNECTION_STRING
的环境变量传递。
步骤 5:生成迁移脚本
如果您想一次将多个存储库迁移到 GitHub Enterprise Cloud,请使用 GitHub CLI 生成迁移脚本。生成的脚本将包含一个迁移命令列表,每个存储库一个。
如果您想迁移单个存储库,请跳到下一步。
生成迁移脚本
您必须从一台可以访问 GitHub Enterprise Server 实例 API 的计算机执行此步骤。如果您能够从浏览器访问您的实例,那么该计算机具有正确的访问权限。
要生成迁移脚本,请运行 gh gei generate-script
命令。
对于 GitHub Enterprise Server 3.8 或更高版本,或者如果您使用的是 3.7 或更低版本且使用 Azure Blob 存储,请使用以下标志
gh gei generate-script --github-source-org SOURCE \ --github-target-org DESTINATION \ --output FILENAME \ --ghes-api-url GHES-API-URL
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,请使用以下标志
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
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
如果您的 GitHub Enterprise Server 实例使用自签名或无效的 SSL 证书,请使用 --no-ssl-verify
标志。使用此标志,GitHub CLI 将仅在从您的实例提取数据时跳过验证 SSL 证书。所有其他调用将验证 SSL。
如果您希望脚本为每个迁移的仓库下载迁移日志,请添加 --download-migration-logs
标志。有关迁移日志的更多信息,请参阅 "访问您的 GitHub Enterprise Importer 迁移日志。"。
将上述命令中的占位符替换为以下值。
占位符 | 值 |
---|---|
SOURCE | 源组织的名称 |
DESTINATION | 目标组织的名称 |
FILENAME | 生成的迁移脚本的文件名 如果您使用的是终端,请使用 .ps1 文件扩展名,因为生成的脚本需要 PowerShell 才能运行。您可以为 Mac 或 Linux 安装 PowerShell。 |
GHES-API-URL | 您 GitHub Enterprise Server 实例 API 的 URL,例如 https://myghes.com/api/v3 |
AWS-BUCKET-NAME | 您的 AWS S3 存储桶的存储桶名称 |
查看迁移脚本
生成脚本后,请查看该文件并根据需要编辑脚本。
- 如果您不想迁移任何仓库,请删除或注释掉相应的行。
- 如果您希望任何仓库在目标组织中具有不同的名称,请更新对应
--target-repo
标志的值。
注意:如果您的仓库的发布数据超过 10 GB,则无法迁移发布数据。使用 --skip-releases
标志迁移不包含发布数据的仓库。
如果您将 GEI 下载为独立二进制文件而不是 GitHub CLI 的扩展,则需要更新生成的脚本以运行二进制文件而不是 gh gei
。
步骤 6:迁移仓库
您可以使用迁移脚本迁移多个仓库,也可以使用 gh gei migrate-repo
命令迁移单个仓库。
迁移仓库时,GitHub CLI 的 GEI 扩展将执行以下步骤
- 连接到您的 GitHub Enterprise Server 实例,并为每个仓库生成两个迁移存档,一个用于 Git 源,另一个用于元数据
- 将迁移存档上传到您选择的 Blob 存储提供商
- 使用存储在 Blob 存储提供商中的存档 URL 在 GitHub Enterprise Cloud 中启动您的迁移
- 从本地机器删除迁移存档
迁移多个仓库
如果您从 GitHub Enterprise Server 3.7 或更早版本迁移,则在运行脚本之前,必须设置其他环境变量以进行身份验证到您的 Blob 存储提供商。
-
对于 Azure Blob 存储,将
AZURE_STORAGE_CONNECTION_STRING
设置为 Azure 存储帐户的连接字符串。仅支持使用存储帐户访问密钥的连接字符串。不支持使用共享访问签名 (SAS) 的连接字符串。有关存储帐户访问密钥的更多信息,请参阅 Azure 文档中的 管理存储帐户访问密钥。
-
对于 AWS S3,请设置以下环境变量。
AWS_ACCESS_KEY
:您存储桶的访问密钥AWS_SECRET_KEY
:您存储桶的密钥AWS_REGION
:存储桶所在的 AWS 区域AWS_SESSION_TOKEN
:会话令牌(如果您使用的是 AWS 临时凭据,请参阅 AWS 文档中的 使用 AWS 资源的临时凭据)
要迁移多个仓库,请运行您上面生成的脚本。将以下命令中的 FILENAME 替换为您在生成脚本时提供的文件名。
-
如果您使用的是终端,请使用
./
。Shell ./FILENAME
./FILENAME
-
如果您使用的是 PowerShell,请使用
.\
。Shell .\FILENAME
.\FILENAME
迁移单个仓库
您必须从一台可以访问 GitHub Enterprise Server 实例 API 的计算机执行此步骤。如果您能够从浏览器访问您的实例,那么该计算机具有正确的访问权限。
要迁移单个仓库,请使用 gh gei migrate-repo
命令。
如果您使用的是 GitHub Enterprise Server 3.8 或更高版本,请使用以下标志
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
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 存储提供商,请使用以下标志进行身份验证
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"
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 存储提供商,请使用以下标志进行身份验证
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"
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"
如果您的 GitHub Enterprise Server 实例使用自签名或无效的 SSL 证书,请使用 --no-ssl-verify
标志。使用此标志,GitHub CLI 将仅在从您的实例提取数据时跳过验证 SSL 证书。所有其他调用将验证 SSL。
注意:如果您的仓库的发布数据超过 10 GB,则无法迁移发布数据。使用 --skip-releases
标志迁移不包含发布数据的仓库。
将上述命令中的占位符替换为以下值。
占位符 | 值 |
---|---|
SOURCE | 源组织的名称 |
CURRENT-NAME | 您要迁移的仓库的名称 |
DESTINATION | 目标组织的名称 |
NEW-NAME | 您希望迁移后的仓库的名称 |
GHES-API-URL | 您 GitHub Enterprise Server 实例 API 的 URL,例如 https://myghes.com/api/v3 |
AZURE_STORAGE_CONNECTION_STRING | Azure 存储帐户的连接字符串。 确保引用连接字符串,其中包含 shell 可能会解释的其他字符。 |
AWS-BUCKET-NAME | 您的 AWS S3 存储桶的存储桶名称 |
如果您想取消迁移,请使用 `abort-migration` 命令,并将 MIGRATION-ID 替换为 `migrate-repo` 返回的 ID。
gh gei abort-migration --migration-id MIGRATION-ID
gh gei abort-migration --migration-id MIGRATION-ID
步骤 7:验证您的迁移并检查错误日志
迁移完成后,我们建议您查看迁移日志。有关更多信息,请参阅“访问 GitHub Enterprise Importer 的迁移日志”。
我们建议您检查迁移后的存储库,以确保其完整性。
迁移完成后,我们建议您从存储容器中删除存档。如果您计划完成其他迁移,请删除 ADO2GH 扩展程序放置到存储容器中的存档。如果您已完成迁移,则可以删除整个容器。