首页 > 解决方案 > 将巨大的 SVN 存储库迁移到 GIT,并且 SVN 存储库上的冻结时间最短

问题描述

我正在从事一个已经运行了一段时间的项目。它托管在 SVN 上。它有 24K 次修订。组织中的某个人认为(我同意)如果我们可以将组织中的所有项目从 SVN 迁移到 GIT,那就太好了。说起来容易做起来难。我们的项目对维持库存非常关键,预计下个季度投产。迁移的时间表设置为 12 月底。这意味着我们既没有等待时间,也没有冻结 SVN 存储库的奢侈。我决定采取以下方法:

  1. 使用 .创建当前存储库的转储svnrdump。这花了大约 3 小时。
  2. 将转储加载到本地svn存储库。这花了大约 12 小时。
  3. 将本地svn存储库转换为git使用git svn clone. 这需要超过 73 小时。
  4. git将此存储库推送到remote.

现在,在执行这些步骤的同时,对现有的远程存储库进行了一些新的提交SVN。有没有办法,我可以将这些新更改合并到新的远程git存储库中。值得注意的是,我们希望保留所有来自 SVN 的提交历史。如果有办法做到这一点,那就意味着我们只需要冻结当前的远程 SVN 几个小时。我还想提一下,我们的新git存储库托管在gitlab. 有没有更好的方法来做到这一点?

标签: gitsvngitlabgit-svn

解决方案


考虑 和 之间的差异svnrdumpsvndump首先检查本地完成(直接在服务器上)svndump(如果您确实可以访问所述服务器)不会更快。

然后,对于同时创建的少数提交/修订,您可以执行svnrdump --incremental.

仅将修订版或修订版范围转储为与先前修订版的差异,而不是默认值,默认值是转储修订版范围的开始,并完全扩展了该修订版的存储库的所有内容。

您可以将其转换为它自己的 Git 存储库,将其提取到您当前的 Git 存储库中,然后在您的正常 Git 分支之上重新选择孤儿分支,以保留历史记录。(请参见此处的示例


推荐阅读