将巨大的 SVN 存储库迁移到 GIT,并且 SVN 存储库的冻结时间最短

Migrating huge SVN repository to GIT with minimum freeze time on the SVN repositories

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

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

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

考虑 differences between svnrdump and svndump,首先检查本地完成(直接在服务器上)svndump(如果您确实可以访问所述服务器)是否会更快。

然后,对于少数同时创建的commits/revisions,你可以做一个svnrdump --incremental

Dump a revision or revision range only as a diff against the previous revision, instead of the default, which is begin a dumped revision range with a complete expansion of all contents of the repository as of that revision.

您可以将其转换为自己的 Git 存储库,将其提取到您当前的 Git 存储库中,然后 rebase/cherry-pick 常规 Git 之上的孤立分支分支,保留历史。 (See an example here)

JFYI:"sync" 模式下的 SubGit 将为您提供自动更改镜像和零停机时间