如何完整迁移/复制Git仓库:含所有远程分支、PR及标签
GitHub跨账户迁移仓库:完整保留分支、标签与PR历史
当然可以实现,不过要注意:分支、标签属于Git仓库本身的内容,用Git命令就能迁移;但Pull Request(PR)是GitHub平台专属的功能,不在Git仓库数据里,需要单独处理。
一、分支与标签的高效迁移(优化你的现有命令)
你的现有命令可以简化,更直接的镜像迁移方式如下,一次性推送所有分支和标签:
# 镜像克隆原仓库(包含所有分支、标签) git clone --mirror OLD_REPO_URL # 进入克隆的镜像仓库目录 cd $(basename OLD_REPO_URL .git) # 添加新仓库的远程地址 git remote add new-origin DESTINATION_REPO_URL # 推送所有分支、标签到新仓库 git push --mirror new-origin
这个方法比你原来的步骤更简洁,避免了bare仓库的转换操作,效果完全一致。
二、PR历史的迁移方法
PR是GitHub平台的元数据,Git命令无法直接同步,有两种可行方案:
方案1:GitHub官方导入功能(推荐)
这是最省心的方式,会自动完整迁移所有PR、评论、分支、标签,包括PR的创建时间、合并状态、评论记录等细节:
- 登录账户Y,创建一个空仓库(不要勾选初始化README、.gitignore等选项)
- 进入新仓库的「Settings」页面,找到「Import code」选项
- 输入账户X的原仓库URL,按照提示完成导入即可
方案2:手动导出重建PR(适合自定义需求)
如果官方导入无法满足你的场景,可手动导出PR数据后在新仓库重建:
- 导出原仓库PR数据:
用GitHub CLI(需提前安装并登录)导出所有PR的核心信息:
这个命令会生成一个JSON文件,包含所有PR(已合并、关闭、打开)的标题、描述、关联分支等信息。gh pr list --repo ACCOUNT_X/REPO_NAME --state all --json number,title,body,headRefName,baseRefName --output prs.json - 在新仓库重建PR:
先确保原仓库的所有分支已经推送到新仓库,再遍历JSON文件,用CLI批量创建PR:
注意:这种方式无法还原PR的创建时间、评论时间、审批记录等细节,只能重建PR的基本内容和分支关联。# 示例:单个PR的创建命令(批量操作需结合Python等脚本语言) gh pr create --repo ACCOUNT_Y/NEW_REPO_NAME --title "PR标题" --body "PR描述内容" --head "原PR的头分支" --base "原PR的目标分支"
内容的提问来源于stack exchange,提问作者luk.monecki
相关产品推荐
相关产品推荐

