如果您要在GitHub产品之间切换,例如从GitHubEnterpriseServer切换到GitHub2enterpriseCloud,或者从另一个代码托管平台(如Bitbucket Server或GitLab)切换到Git Hub,您需要将您的工作带到您身边:您的代码、代码的历史记录,以及您过去的所有对话和协作。
本指南将引导您规划和执行成功的迁移。您将学习如何为迁移做好准备,可以用来移动数据的工具,以及如何使迁移成功。
在使用本指南规划迁移之前,请学习以下重要术语。
期限 | 定义 |
---|
代码托管平台 | 用于托管源代码存储库和进行协作的在线工具,如GitHub Enterprise Cloud、GitHup Enterprise Server、Bitbucket Server和GitLab.com。 |
版本控制系统(VCS) | 在进行更改的机器上,用于跟踪和管理源代码更改的工具。
例如,如果您使用GitHub或GitLab作为代码托管平台,那么您使用的是Git版本控制系统。如果您使用Azure DevOps作为代码托管平台,则可以使用Git或Team Foundation版本控制(TFVC)作为底层版本控制系统。也有可能您根本没有使用VCS。 |
迁移起点 | 你要迁移的地方。通常,这将是一个代码托管平台,但它可能是您自己的机器或共享网络驱动器。 |
迁移目的地 | 您要使用的GitHub产品。 |
迁移路径 | 迁移起点和迁移目的地的组合,例如“Bitbucket Server到GitHub Enterprise Cloud”
对于某些迁移路径,GitHub提供了专业工具,如GitHubEnterpriseImporter,以帮助您进行迁移。 |
在规划迁移之前,您需要了解要迁移的内容和时间。
首先,确定需要从何处移动数据。这通常是(但不总是)代码托管平台。
您的代码托管平台可能是GitHub产品,如GitHub.com或GitHup Enterprise Server,也可能是另一个代码托管平台,如Bitbucket Server、GitLab或Azure DevOps。根据业务的规模和复杂性,您可能会使用多个不同的代码托管平台。
例如,如果您根本没有使用代码托管平台,那么您可能会将代码存储在共享网络驱动器上。
无论代码位于何处,都是您的“迁移起点”
您还需要知道要迁移到哪个GitHub产品,或者您的“迁移目的地”。这可能是GitHub.com,其中包括GitHup Enterprise Cloud,或者是GitHub Enterprise Server。
在确定了迁移起点和目标之后,确定需要迁移的数据。
您应该使用迁移源中需要迁移的所有存储库的列表来构建迁移清单。我们建议使用电子表格。作为起点,您应该为每个存储库记录以下数据:
- 姓名
- 所有者:在GitHub中,这将是一个组织,但在其他工具中,可能会有不同类型的所有者
- 统一资源定位地址
- 上次更新的时间戳
- 拉请求数(或迁移源中的等效请求数)
- 问题数量(或迁移源中的等效问题)
如果您从GitHub Enterprise Cloud或GitHub Enterprise Server迁移,可以使用gh-repo-stats公司
GitHub CLI的扩展。只需几个命令,gh回购统计数据
将连接到迁移源的API,并使用所有推荐字段创建CSV。有关更多信息,请参阅mona-actions/gh-repo-stats存储库。
注: gh-repo-stats公司
是GitHub支持不支持的第三方开源工具。如果您需要使用此工具的帮助,打开问题在其存储库中。
如果你从Azure DevOps迁移,我们建议库存报告
GitHub CLI的ADO2GH扩展中的命令。这个库存报告
命令将与Azure DevOps API连接,然后使用上面建议的一些字段构建一个简单的CSV。有关如何安装GitHub CLI的ADO2GH扩展的更多信息,请参阅“将存储库从Azure DevOps迁移到GitHub企业云."
如果您从Bitbucket服务器或Bitbudge数据中心迁移,我们建议库存报告
GitHub CLI的BBS2GH扩展中的命令。这个库存报告
该命令将使用Bitbucket实例的API构建一个简单的CSV。有关如何安装GitHub CLI的BBS2GH扩展的更多信息,请参阅“将存储库从Bitbucket Server迁移到GitHub企业云."
对于其他迁移源,请自行创建迁移清单。您可以使用源站的报告工具(如果可用)或API构建电子表格,也可以手动创建库存。
无论您为迁移清单选择什么方法,都要记下您遵循的过程或运行的命令。在继续规划迁移时,很可能需要重新运行库存。
拥有所有存储库的列表后,您可以决定要迁移哪些存储库。一种选择是完全迁移所有内容。然而,迁移是评估存储库并删除不再需要的存储库的绝佳机会。我们发现,许多企业都有数百甚至数千个未使用和不需要的存储库,对它们进行归档可以使您的迁移更加简单。
完成基本迁移清单后,收集有关存储库大小的信息。如果您的存储库很大或包含的单个文件超过100MB,这可能会使迁移时间更长、风险更大,并限制可用的迁移工具。
如果您使用Git作为版本控制系统,那么重要的不仅仅是存储库中当前的大文件;存储库历史记录中的大型文件也很重要。例如,如果您过去的存储库中有一个大于100MB的文件,那么该文件仍将存在于Git历史记录中,除非您已重写历史记录以删除该文件的所有痕迹。有关重写历史记录的详细信息,请参阅“关于GitHub上的大文件."
如果您使用gh回购统计数据
为了建立库存,您已经掌握了一些关于存储库大小的基本信息。要构建完整的迁移清单,您需要获得有关存储库中数据的更详细信息。
接下来,按照以下说明将以下数据添加到每个存储库的迁移清单中:
- 最大文件的大小(也称为“blob”)
- 所有文件的总大小(“blob”)
如果您使用的是Git以外的版本控制系统,或者根本没有使用版本控制系统跟踪您的文件,请首先将存储库移动到Git。有关详细信息,请参阅“将本地托管代码添加到GitHub."
然后,使用开源工具,吉特尺寸
,为您的存储库获取此数据。
- 安装
吉特尺寸
。有关详细信息,请参阅github/git尺寸存储库。
- 要验证这一点
吉特尺寸
已安装,请运行git-sizer–版本
。如果您看到如下输出git-sizer 1.5.0版
,安装成功。
- 安装
jq公司
。有关更多信息,请参阅下载jq在中jq公司
文档。
- 验证
jq公司
已安装,请运行jq–版本
。如果您看到如下输出jq-1.6条
,安装成功。
- 要从迁移源克隆存储库,请运行
git克隆--镜像
.
- 导航到克隆存储库的目录。
- 要获取存储库中最大文件的字节大小,请运行
git-sizer--无progress-j | jq“.max_blob_size”
.
- 要获取存储库中所有文件的总大小(以字节为单位),请运行
git-sizer--无progress-j|jq“.unique_blob_size”
.
- 将前面步骤中的值添加到库存中。
运行迁移时可以采用三种方法,它们提供不同级别的迁移保真度。
迁移类型 | 定义 | 要求 |
---|
源快照 | 迁移代码的当前状态,就像现在一样,但不要包含任何修订历史记录。 | 可能适用于每个源和目标,即使您的代码当前未在版本控制系统(VCS)中跟踪。 |
来源和历史 | 迁移代码的当前状态及其修订历史记录。 | 如果您一直在跟踪Git中的更改,或者在迁移之前可以转换为Git的版本控制系统,则可能会发生这种情况。 |
源、历史和元数据 | 迁移代码的当前状态及其修订历史记录,以及协作历史记录,例如问题和请求以及设置。 | 需要专业工具,但并非所有迁移路径都可以使用这些工具。 |
在决定要完成哪种类型的迁移时,请考虑您组织的需要和可用的工具。
您可能希望对不同的存储库使用不同的策略。例如,您可能有一些旧的存档存储库,其中历史记录并不重要,而高保真迁移对您最活跃的代码至关重要。
您可以选择完成“自助迁移”,即仅使用我们的文档规划和运行自己的迁移,而无需GitHub的任何专业支持。
或者,您可能更喜欢与GitHub的专家服务团队或GitHup合作伙伴合作,我们称之为“专家引导迁移”。通过专家引导迁移,您可以从之前运行过数十甚至数百次迁移的专家的知识和经验中受益,您还可以使用其他无法自助使用的迁移工具。
要了解有关专家指导的迁移的更多信息,请联系您的客户代表或专家服务.
要计划迁移,请考虑目的地和来源。这些考虑因素决定了迁移的路径。有关详细信息,请参阅“GitHub的迁移路径."
在GitHub中,每个存储库都属于一个组织。组织是共享帐户,企业和开源项目可以在其中跨多个项目同时协作,具有复杂的安全和管理功能。有关详细信息,请参阅“关于组织."
无论您是第一次采用GitHub,还是已经在使用GitHup,在迁移后,请暂停考虑组织和存储库的最有效结构。您选择的设计可以最大限度地实现协作和发现,并将管理负担降至最低,也可以创建不必要的竖井和管理开销。
我们建议您尽量减少组织的数量,并根据五种原型中的一种来构建它们。有关详细指南,请参阅“构建企业组织的最佳实践."
在继续规划之前,请执行包括所有存储库在内的试运行迁移。全面的干跑让您能够:
- 验证您选择的工具是否适用于存储库
- 确认工具符合您的要求
- 准确了解要迁移的数据和未迁移的数据
- 了解迁移需要多长时间,以帮助您安排生产迁移
干运行迁移没有什么特别之处。只需运行正常迁移,然后删除迁移目标中的存储库。
迁移存储库只是更大迁移过程中的一步。您还需要执行其他步骤,可能还需要手动迁移数据或设置。
迁移所需步骤的完整列表取决于您的独特情况,但有一些迁移前步骤适用于所有迁移:
- 让您的用户提前了解即将进行的迁移及其时间表
- 迁移前不久发送提醒
- 在GitHub中为您的团队设置用户帐户
- 向用户发送有关更新其本地存储库以指向新系统的说明
还有适用于所有迁移的迁移后步骤:
- 让您的用户知道迁移已完成
- 将活动链接到迁移目标中的用户
- 停用迁移源
以下是您在规划迁移时应该考虑的其他一些步骤。
如果您在GitHub产品之间移动,已经在使用CI/CD的GitHub操作,并将继续使用GitHup操作,则没有太多工作要做。存储库中的工作流文件将自动为您迁移。如果您使用自托管跑步者,则需要在新的GitHub组织中设置这些跑步者,以便他们可以运行您的工作流。
如果不使用GitHub Actions,情况会更加复杂。如果您计划继续使用相同的CI/CD提供程序,则需要检查该提供程序是否与GitHub兼容,并将该提供程序连接到新的组织和存储库。
如果您计划切换到GitHub Actions,我们不建议您在迁移存储库的同时进行切换。相反,请等待稍后的日期,并将CI/CD迁移作为单独的步骤执行。这使得迁移过程更易于管理。准备好迁移后,请参阅“迁移到GitHub操作."
您可能正在使用与代码托管提供商的集成,可以是内部开发的,也可以是其他供应商提供的。
如果您已经在使用GitHub,则需要重新配置集成以指向新的组织和存储库。如果集成由供应商提供,请联系供应商获取说明。如果集成是在内部开发的,请在新组织中重新配置集成,生成新的令牌和密钥。
如果您是GitHub的新手,请检查您的集成是否与GitHup兼容,然后重新配置它们。如果您使用内部开发的集成,请重新编写它们以使用GitHub API。有关详细信息,请参阅“GitHub REST API文档."
如果您要迁移协作历史记录、元数据以及代码,则需要将用户的活动链接到迁移目标中的新身份。
例如,假设@octocat在您的GitHub Enterprise Server实例上创建了一个问题,并且您正在迁移到GitHup Enterprise Cloud。在GitHub企业云中,@octocat可能有一个完全不同的用户名。归属过程允许您将用户活动与这些新身份联系起来。
不同工具的属性工作方式不同:
- 如果您正在使用
地精测量仪
,全球出口商
,或bbs出口商
,您将提前决定如何属性化数据,并在导入数据时包含映射文件。
- 如果您正在使用GitHub Enterprise Importer,数据将链接到称为“人体模型”的占位符标识,您可以在数据迁移后将此历史记录分配给真实用户。有关详细信息,请参阅“回收GitHub企业进口商的人体模型."
大多数客户使用团队来管理对存储库的访问。对于团队,您可以将Mona添加到工程团队中,并让工程团队中的每个人都可以访问存储库,而不是让Mona直接访问存储库。有关详细信息,请参阅“关于团队."
您可以在迁移存储库之前创建团队并添加团队成员。您可能希望通过身份提供者(IdP)将您的团队链接到IdP组来管理您的成员。有关详细信息,请参阅“将团队与身份提供程序组同步."
然而,在迁移存储库之前,您不能将团队附加到存储库。