关于 GitHub Enterprise Importer
所需的访问权限
为了保护数据,GitHub 强制实施特定的访问要求来使用 GitHub Enterprise Importer。 这些要求会因尝试执行的任务而异。 为防止出错,应仔细查看本文,并确认是否符合要完成的任务的所有要求。
要将存储库从 Bitbucket Server 迁移到 GitHub,需对源(Bitbucket 服务器实例)和目标(GitHub 上的组织)具有足够的访问权限。 要具有足够的访问权限,需满足以下条件:
- GitHub 上目标组织中的必需角色
- 可以访问 personal access token 上目标组织的 GitHub
- personal access token 必须具有所有必需的范围,具体取决于你的角色和要完成的任务。
- 如果目标组织对 GitHub 使用 SAML 单一登录,则必须授权 personal access token 以实现 SSO。
- Bitbucket Server 必需的权限以及 SFTP 或 SMB 访问权限
此外,如果将 IP 允许列表用于目标组织,则可能需要配置允许列表以允许 GitHub Enterprise Importer 访问。
关于迁移者角色
为了使组织所有者不再需要完成迁移, GitHub 包含使用 GitHub Enterprise Importer 的不同角色。
通过授予迁移者角色,可以指定其他团队或个人来处理迁移。
- 只能为 GitHub.com 或 GHE.com 上的组织授予迁移者角色。
- 可以将迁移者角色授予单个用户或团队。 强烈建议将迁移者角色分配给团队。 然后,可以通过调整团队成员身份来进一步自定义可运行迁移的人员。 请参阅“添加组织成员到团队”或“从团队中删除组织成员”。
- 迁移者必须使用满足运行迁移的所有要求的 personal access token。
警告
将组织中的迁移者角色授予用户或团队时,即授予他们导入或导出该组织中的任何存储库的能力。
若要授予迁移者角色,请参阅“授予迁移者角色”。
GitHub
所需的角色
对 GitHub 上的目标组织而言,不同任务需要不同角色。
下表列出了可以执行某些任务的具体角色。
| 任务 | 组织所有者 | 迁移者 |
|---|---|---|
| 为存储库迁移分配迁移者角色 | ||
| 运行存储库迁移 | ||
| 下载迁移日志 | ||
| 回收模型 |
personal access token 所需的范围
要运行迁移,需要一个 personal access token,它可以访问 GitHub 上的目标组织。
GitHub personal access token (classic) 所需的范围取决于你的角色和要完成的任务。
注意
只能使用 personal access token (classic),而不能使用 fine-grained personal access token。这意味着,如果贵组织使用“限制 GitHub Enterprise Importer 访问组织”策略,则你无法使用 personal access tokens (classic)。 有关详细信息,请参阅“在企业中强制实施个人访问令牌策略”。
| 任务 | 组织所有者 | 迁移者 |
|---|---|---|
| 为存储库迁移分配迁移者角色 | admin:org | |
| 运行存储库迁移(目标组织) | repo, admin:org, workflow | repo, read:org, workflow |
| 下载迁移日志 | repo, admin:org, workflow | repo, read:org, workflow |
| 回收模型 | admin:org |
Bitbucket Server 所需的权限
从 Bitbucket Server 迁移需要:
- 具有管理员或超级管理员权限的 Bitbucket Server 帐户的用户名和密码
- 如果您的 Bitbucket Server 实例在 Linux 上运行,您可以通过 SFTP 访问该实例(参见 SSH 密钥)。 通常,如果可以通过 SSH 访问该服务器,则也可以使用 SFTP。
- 如果 Bitbucket Server 实例在 Windows 上运行,则为对 Bitbucket Server 实例的文件共享 (SMB) 访问权限
SSH 密钥
如果 Bitbucket Server 实例在 Linux 上运行,则必须使用满足以下要求的 SSH 密钥:
- 没有密码
- 使用以下密码之一
aes256-ctr3des-cbcaes128-cbcaes192-cbcaes256-cbcblowfish-cbctwofish-cbctwofish192-cbctwofish128-cbctwofish256-cbcarcfourarcfour128arcfour256cast128-cbcaes128-ctraes192-ctr
如果运行迁移时收到以下错误,SSH 私钥将使用不受支持的密码:cipher name aes256-ctr for openssh key file is not supported。 若要详细了解如何生成兼容的私钥,请参阅“使用 GitHub Enterprise Importer 排查迁移中的问题”。
授予迁移者角色
若要允许除组织所有者以外的其他人运行迁移或下载迁移日志,可以向用户或团队授予迁移者角色。 有关详细信息,请参阅关于迁移者角色。
可以使用 BBS2GH extension of the GitHub CLI 或 GraphQL API 授予迁移者角色。
-
[使用 BBS2GH extension
授予迁移者角色](#granting-the-migrator-role-with-the-bbs2gh-extension)
使用 BBS2GH extension
来授予迁移者角色
若要使用 CLI 授予迁移者角色,必须已安装 BBS2GH extension of the GitHub CLI。 有关详细信息,请参阅“将存储库从 Bitbucket Server 迁移到 GitHub Enterprise Cloud”。
-
在 GitHub 上,创建并记录一个 personal access token,以满足授予迁移者角色的所有要求。 有关详细信息,请参阅为 personal access token 创建 GitHub Enterprise Importer。
-
将 personal access token 设置为环境变量,将以下命令中的 TOKEN 替换为你在上面记录的 personal access token。
-
如果使用终端,请使用
export命令。Shell export GH_PAT="TOKEN"
export GH_PAT="TOKEN" -
如果使用 PowerShell,请使用
$env命令。Shell $env:GH_PAT="TOKEN"
$env:GH_PAT="TOKEN"
-
-
使用
gh bbs2gh grant-migrator-role命令,将 ORGANIZATION 替换为你要为其授予迁移者角色的组织,将 ACTOR 替换为用户或团队名称,并将 TYPE 替换为USER或TEAM。Shell gh bbs2gh grant-migrator-role --github-org ORGANIZATION --actor ACTOR --actor-type TYPE
gh bbs2gh grant-migrator-role --github-org ORGANIZATION --actor ACTOR --actor-type TYPE注意
如果你要授予 GHE.com 的迁移者角色,则你还必须包含企业子域的目标 API URL。 例如:
--target-api-url https://api.octocorp.ghe.com。
使用 GraphQL API 授予迁移者角色
可以使用 grantMigratorRole GraphQL 突变来分配迁移者角色,并使用 revokeMigratorRole 突变来撤销迁移者角色。
必须使用满足所有访问要求的 personal access token (PAT)。 有关详细信息,请参阅 personal access token 所需的作用域。
grantMigratorRole 突变
此 GraphQL 突变设置迁移角色。
mutation grantMigratorRole (
$organizationId: ID!,
$actor: String!,
$actor_type: ActorType!
) {
grantMigratorRole( input: {
organizationId: $organizationId,
actor: $actor,
actorType: $actor_type
})
{ success }
}
| 查询变量 | 说明 |
|---|---|
organizationId | 组织的 ownerId 或组织 ID(来自 GetOrgInfo 查询)。 |
actor | 要将迁移角色分配到的团队或用户名。 |
actor_type | 指定迁移者是 USER 还是 TEAM。 |
revokeMigratorRole 突变
此突变将删除迁移者角色。
mutation revokeMigratorRole (
$organizationId: ID!,
$actor: String!,
$actor_type: ActorType!
) {
revokeMigratorRole( input: {
organizationId: $organizationId,
actor: $actor,
actorType: $actor_type
})
{ success }
}
为 personal access token 创建 GitHub Enterprise Importer
- 验证是否有足够的角色权限来完成要完成的任务。 有关详细信息,请参阅“必需的角色”。
- 创建 personal access token (classic),确保授予要完成的任务所需的全部范围。 只能使用 personal access token (classic),而不能使用 fine-grained personal access token。 有关详细信息,请参阅“管理个人访问令牌”和“personal access token所需的范围”。
- 如果对需要访问的组织强制实施 SAML 单一登录,请授权 personal access token 以实现 SSO。 有关详细信息,请参阅“授权个人访问令牌以与单点登录一起使用”。
为迁移配置 IP 允许列表
如果迁移的目标使用 IP 允许列表(GitHub的 IP 允许列表功能或标识提供者的 (IdP) IP 允许列表限制),则需要在 GitHub 上配置 IP 允许列表。
- 如果使用 GitHub 的 IP 允许列表功能,则必须将下面的 GitHub IP 范围添加到目标组织的允许列表中。
- 如果使用 IdP 的 IP 允许列表来限制对 GitHub 上企业的访问,则应在迁移完成之前在企业帐户设置中禁用这些限制。
有关详细信息,请参阅 管理组织允许的 IP 地址 和 使用 IP 允许列表限制企业网络的流入流量。
GitHub.com
的 IP 范围
需要将以下 IP 范围添加到 IP 允许列表:
- 192.30.252.0/22
- 185.199.108.0/22
- 140.82.112.0/20
- 143.55.64.0/20
- 135.234.59.224/28 (2025 年 7 月 28 日添加)
- 2a0a:a440::/29
- 2606:50c0::/32
- 20.99.172.64/28(2025 年 7 月 28 日添加)
可以随时通过 REST API 的“获取GitHub Enterprise Importer元信息”终结点获取GitHub使用的最新 IP 范围列表。
响应中的 github_enterprise_importer 键包含用于迁移的 IP 范围列表。
有关详细信息,请参阅“元数据的 REST API 端点”。
GitHub.com
的 Azure Blob 存储虚拟网络防火墙规则
对于为迁移配置了 Azure Blob 存储以存储仓库数据的客户,必须向其存储帐户添加虚拟网络防火墙规则,以允许 GEI 访问仓库数据。 这需要使用 Azure CLI 或 PowerShell,因为目前不支持在 Azure 门户上添加这些虚拟网络防火墙规则。 必须将以下虚拟网络子网 ID 添加到存储帐户的虚拟网络防火墙规则中:
/subscriptions/cdf1c65c-e6f4-43b3-945f-c5280f104f9c/resourceGroups/ghr-network-service-1a72ec6f-45b6-44be-a4bd-f0fe50079c9f-5-westus2/providers/Microsoft.Network/virtualNetworks/1a72ec6f-45b6-44be-a4bd-f0fe50079c9f-5/subnets/1a72ec6f-45b6-44be-a4bd-f0fe50079c9f-5/subscriptions/173ad082-b20d-4d44-8257-7fbf34959bed/resourceGroups/ghr-network-service-1a72ec6f-45b6-44be-a4bd-f0fe50079c9f-5-westus3/providers/Microsoft.Network/virtualNetworks/1a72ec6f-45b6-44be-a4bd-f0fe50079c9f-5/subnets/1a72ec6f-45b6-44be-a4bd-f0fe50079c9f-5
若要向 Azure 存储帐户添加虚拟网络防火墙规则,可以使用上面提供的网络子网 ID,按照为 Azure 存储创建虚拟网络规则文档中的步骤 5 进行操作。 请确保使用与存储帐户关联的订阅 ID 提供 --subscription 参数。
GHE.com
的 IP 范围
必须允许:
- 每个人必需的范围
- 取决于数据驻留区域的其他范围
有关要添加的范围,请参阅 GHE.com 的网络详细信息。
此外,如果使用具有防火墙规则的 Blob 存储帐户:
- 必须允许访问 GHE.com 的出口 IP 范围。 请参阅“GHE.com 的网络详细信息”。
- 如果正在使用 Azure Blob 存储,可能需要执行其他一些网络配置。 如果 Azure Blob 存储恰好与 GitHub Enterprise Importer 服务的计算位于同一区域,则可能会出现这种情况。 请联系 GitHub 支持。