有没有办法加速git svn?

7
我正在尝试将一个拥有18年历史、6000多个分支和超过50万次提交的SVN仓库转换为Bit Bucket。Git svn在大约6小时内处理了前50000次提交,并花费了3天时间转换接下来的40000次提交。它已经崩溃了两次,并因缺少作者而停止了两次,这些作者在某种程度上设法逃避了svn日志。
现在已经到达了仓库开始广泛使用分支的部分。它现在速度非常慢。分支给它带来了严重的麻烦。每2-3分钟可能只有一次提交。每个新分支似乎都会让整个操作变得更加缓慢。
我不确定它在哪里花费了时间。它是I/O还是CPU密集型操作?Atlassian建议在本地磁盘上运行操作,即在SVN所在的位置;没有网络传输。但我不知道这是否有帮助,因为它并没有花费时间从SVN下载文件。它是否在分支上运行提交,但没有在控制台上显示?
我认为将这个仓库转移到Bit Bucket是不可行的。我认为最好将所有新开发移至Bit Bucket,并继续运行SVN。以目前的转换速率,需要几年时间才能完成。

你运行转换的操作系统是什么?Windows曾经比Linux/Mac慢几个数量级。 - Mykola Gurov
这是关于一次性迁移并且之后只使用Git,还是您想要从Git克隆提交回SVN? - Vampire
这是一次性迁移,操作系统是Linux。 - eeijlar
1
我遇到的问题是由于svn仓库出现了问题:历史记录中存在循环依赖,大量的提交:60GB文件,200k个json文件。使用svn2git,您可以使用pstack来识别此类问题。唯一的解决方案是修复svn仓库,虽然不太美观,但如果您希望迁移顺利进行,这是必须要做的。 - eeijlar
2个回答

4

git-svn不是用于一次性转换存储库或存储库部分的正确工具。如果您想使用Git作为现有SVN服务器的前端,则它是一个很好的工具,但对于一次性转换,您不应该使用git-svn,而应该使用svn2git,因为它更适合这种情况。

有许多称为svn2git的工具,其中最好的可能是来自https://github.com/svn-all-fast-export/svn2git的KDE工具。我强烈建议使用那个svn2git工具。它是我知道的最好的工具,并且在您可以使用其规则文件做的事情方面非常灵活。

您将能够轻松配置svn2git的规则文件以产生所需的结果,并且速度快得多。

如果您对存储库的历史记录不确定,请使用http://blog.hartwork.org/?p=763中的svneverever工具调查将其迁移到Git时的历史记录。


即使git-svn更容易入门,以下是一些使用KDE svn2git而不是git-svn的进一步原因,除了其灵活性之外:

  • svn2git(如果使用正确)可以更好、更干净地重建历史记录,尤其是对于具有分支和合并等更复杂历史记录的情况。
  • 标签是真正的标签,而不是Git中的分支。
  • 使用git-svn,标签包含一个额外的空提交,这也使它们不是分支的一部分,因此默认情况下只有指向已获取分支的标签才会被获取,直到您将--tags命令添加到命令中。使用正确的svn2git,标签在它们应该在的位置。
  • 如果您在SVN中更改了布局,则可以轻松配置svn2git,而使用git-svn最终会导致丢失历史记录。
  • 使用svn2git,您还可以轻松地将一个SVN存储库拆分为多个Git存储库,或者将同一SVN根目录中的多个SVN存储库合并为一个Git存储库。
  • 使用正确的svn2git进行转换比使用git-svn快得多。

您看,有许多原因说明为什么git-svn不好,而KDE的svn2git更好。 :-)


一个非常棒的工具,真正为编写它的KDE团队赢得了荣誉。 - eeijlar
1
你使用svn2git将“超过500,000个提交”转换为Git花费了多长时间?我想要一个大致的估计,因为我现在有一个类似的迁移任务。 - mihca
该工具可在Ubuntu软件包中获取:sudo apt install svn-all-fast-export - mihca
1
转换到Git需要多长时间?svn-all-fast-export在大约45分钟内处理了我们的300,000个提交(没有分支,没有标签)。但是只有在没有选项“--svn-ignore”的情况下。这个选项似乎会显著减慢迁移过程,因为它会读取和合并svn文件夹属性。 - mihca

0

您可以仅提交当前存储库内容中的一个分支,而无需迁移整个 SVN 历史记录。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接