【问题标题】:Git migration: copy commits from one repo to an another including merge commits and preserve historyGit 迁移:将提交从一个仓库复制到另一个仓库,包括合并提交并保留历史记录
【发布时间】:2015-09-14 21:10:44
【问题描述】:

我们最近的项目(大约 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 存储库,其中所有模块都是子目录。

我无法导入整个svnroot(我只对trunks感兴趣),并尝试了包括git svn在内的几个工具,但没有成功。

我读过一个关于同样问题的问题:https://serverfault.com/questions/420828/migrate-multiple-svn-repositories-into-single-git-repository

我做了什么:

管理导入子目录(使用 svn2git ruby​​gem)作为 git repos,并使用过滤器分支移动子目录中的文件,并合并开发中的所有内容。 在删除了 100 万个文件后,我已经检查了旧的 repo。这是基地。

问题:

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

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

问题是:

我如何将提交(从旧的存储库,在特定提交之后)迁移到新的存储库,其中分支和合并提交及其所有历史记录也将被复制?

【问题讨论】:

    标签: git version-control merge migrate svn2git


    【解决方案1】:

    如果您有意将多个 SVN 存储库放入一个 git 存储库中,我认为您会给自己造成一些长期的痛苦,最好为每个模块创建一个存储库。

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

    【讨论】:

    • 有人告诉我,子树和子模块会导致问题,所以我宁愿不使用它。问题是:我们现在有一个 git repo,我们已经在这个 repo 中工作了几个月,我们不想丢失提交历史。真正的问题是:如何在某个历史点之后将提交导入到这个新创建的仓库(同时保留合并提交和分支)
    猜你喜欢
    • 2013-10-03
    • 1970-01-01
    • 2016-04-12
    • 1970-01-01
    • 2014-01-05
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多