Git迁移:将提交从一个仓库复制到另一个仓库,包括合并提交和保留历史记录

时间:2015-06-28 09:35:12

标签: git version-control merge migrate svn2git

我们的项目最近(约4个月前),从SVN转移到git。我们最初的迁移是由一个具有基本git知识的人完成的。我们的git repo现在有点混乱(有一个提交,其中100万个文件被删除,差异就像25G)。

我想修复git repo,因为内存错误导致blame退出,更不用说sonarqube需要很长时间才能运行。

项目布局为:

我们在svnroot下的子目录中有几个模块。

svnrepo/
  module1/
    trunk
    branches/
      ...
    tags/
      1.x
      ...
  module2/
    trunk
    branches/
      ...
    tags/
      1.x
      ...

现在我们有一个“大”的git repo,其中所有模块都是子目录。

我无法导入整个svnroot(我只对中继线感兴趣),并尝试了几种工具,包括git svn,但没有用。

我已经阅读了有关同一问题的问题:https://serverfault.com/questions/420828/migrate-multiple-svn-repositories-into-single-git-repository

我做了什么:

管理导入子目录(使用svn2git ruby​​gem)作为git repos,并使用filter分支移动子目录中的文件,并合并develop中的所有内容。 删除了100万个文件后,我检查了旧的仓库。这是基础。

问题:

为了替换我们当前“破损”的仓库,我需要确保每次提交都在git迁移后完成,将迁移到新的仓库。

我试图挑选提交,但看起来,我将丢失历史记录,因为它只保留合并提交的差异。

问题是:

如何以一种分支和合并提交的方式将提交(从旧的repo,在该特定提交之后)迁移到新的repo,并且还将复制它们的所有历史记录?

1 个答案:

答案 0 :(得分:0)

如果你故意试图将多个SVN repos放到一个git repo中,我认为你会给自己造成一些长期的悲痛,并且最好不要为每个模块创建一个repo。

然后,您可以使用子树,子模块或其他机制将模块拉下来并一起使用。