如何在不同Git服务器间迁移仓库的Pull Request?
跨Git服务仓库迁移无法同步Pull Request的原因及解决方法
问题根因
你当前使用的迁移命令仅能同步Git原生管理的版本数据:
git clone --bare https://github.forEx.myRepositoryUrl git remote set-url origin git@github.com:Example/myRepositoryUrl.git git push --all git push --tags
上述命令覆盖的同步范围仅包含所有分支提交历史、标签数据。Pull Request(PR)不属于Git原生版本对象,是Git托管平台独立存储在自身业务数据库中的平台功能数据,不存在于裸仓库的Git对象目录中,因此仅通过Git原生命令完全无法完成PR迁移。
可行迁移方案
- 优先使用目标平台官方导入工具
主流Git托管服务(GitHub、GitLab、Gitea、Gitee等)均提供官方仓库导入能力,除基础代码数据外,支持同步源仓库的PR、Issue、评论、审核记录、协作者权限等关联数据。操作时仅需在目标平台新建仓库入口选择「导入现有仓库」,填入源仓库地址与具备读权限的访问凭据,勾选需要同步的PR、Issue选项即可自动完成全量迁移,是迁移成本最低、数据完整性最好的方案。 - 通过平台API批量迁移PR
若两个平台无直接适配的导入通道,可分别调用源平台、目标平台的开放API完成迁移:先从源平台分页拉取全量PR的元数据(标题、描述、源/目标分支、关联提交、创建人、创建时间、评论、审核状态),再按照目标平台的API参数格式批量写入即可。注意通过API迁移的PR会保留原始内容信息,但部分平台会将其标记为迁移生成,无法完全还原PR在源平台的实时交互状态。 - 少量PR可做静态归档
若历史PR数量极少,无需在新平台还原PR交互能力,可将源平台所有PR页面导出为静态文档,存入新仓库的docs/historical-pr目录提交,在README中添加存档入口说明即可。
注意:部分平台会为开放状态的PR生成
refs/pull/*格式的临时Git引用,即便你将这些引用强行push到目标仓库,也不会被目标平台识别为有效PR,只会生成无业务关联的孤立自定义引用,没有实际意义。
内容的提问来源于stack exchange,提问作者DEBAJYOTI PATRA
相关产品推荐
相关产品推荐

