如何从一个 Git 存储库迁移到另一个 Git 存储库?

Posted

技术标签:

【中文标题】如何从一个 Git 存储库迁移到另一个 Git 存储库?【英文标题】:How to migrate from one Git repo to another Git repo? 【发布时间】:2020-10-25 20:26:39 【问题描述】:

我需要从一个 Git 存储库迁移到另一个 Git 存储库。目的地不为空。过去有人显然已经做了这项工作,但现在所有的分支都已经过时了。

情况是这样的:

源远程仓库:repo_source

分支机构:

branch_A branch_B branch_C branch_D

目标远程仓库:repo_dest 分支:

branch_A branch_B

想法是让缺失的分支(branch_C、branch_D)和已经存在的分支(branch_A、branch_B)需要用新数据进行更新。

作为示例,这里只有 4 个分支,但实际上更多。那么,有没有一种方法(脚本)可以让这种迁移变得简单?

【问题讨论】:

【参考方案1】:

使用 git clone 命令克隆存储库 repo_source。

git clone repo_source

完成后,

git remote add repo_dest repo_dest_url
git push --force --all repo_dest 

即使存在,这也应该替换所有目标分支。

【讨论】:

我建议先尝试不使用--force,如果它有效,那很好,如果它在强制之前不考虑问题。【参考方案2】:

您可以将repo_dest 存储库添加为另一个远程,然后在本地拉取并合并更改并推送它们。

从您的本地工作目录尝试以下操作;

git remote add new_origin ORIGIN_URL           # add new remote
git pull new_origin branch_A                   # pull, merge branch_A and fix conflicts (if any)
git pull new_origin branch_B                   # pull, merge branch_B and fix conflicts (if any)
git push new_origin branch_A                   # push each branch to the new remote
git push new_origin branch_B
git push new_origin branch_C
git push new_origin branch_D

【讨论】:

是的,我正在做类似的事情,但我收到消息 Branch 'master' set up to track remote branch 'master' from 'repo_dest'。一切都是最新的。并没有真正发生它似乎忽略了 --all param 那么不要使用--all。分别推送每个分支。 你可以做的另一件事。签出master到新分支,删除本地master分支,推送所有分支,恢复master分支。

以上是关于如何从一个 Git 存储库迁移到另一个 Git 存储库?的主要内容,如果未能解决你的问题,请参考以下文章

从 git 存储库创建补丁或差异文件并将其应用到另一个不同的 git 存储库

从一个git仓库迁移代码到另一个git仓库(亲测有效版)(转)

sh 将子目录从一个git存储库移动到另一个git存储库的子目录,而不会丢失提交历史记录。

从github迁移git存储库到gitee 2022-02-15

如何将一些文件从一个 git repo 移动到另一个(不是克隆),保留历史记录

如何将 TFVC 项目从 Azure DevOps 服务器迁移到新的 Azure DevOps 帐户作为 Git 存储库