将大型SVN存储库迁移到Git时,遇到了内存不足异常

5

我正在尝试对一个非常大的SVN仓库执行git svn克隆。之前我已经使用 git svn clone 进行了迁移,包括完整的分支、标签和历史记录,并且一切都进展顺利。 但是这次运行了一段时间后,脚本抛出了以下错误:

libsvn: 内存不足 - 终止应用程序。18 [main] perl 13884 cygwin_exception::open_stackdumpfile: 将堆栈跟踪转储到perl.exe.stackdump

我到处查找,但找不到与此相关的任何信息。如果有人遇到类似的错误,我将非常感激您的建议。


这是一次性转换吗?之后只使用Git,还是您想从Git克隆提交回SVN呢? - Vampire
1
这是一次性的转换,一旦事情转移到Git上,我们将只使用Git并停止使用SVN。 - Anshul
1个回答

2

git-svn 不是用于一次性转换存储库的正确工具。如果您想将 Git 用作现有 SVN 服务器的前端,则它是一个很好的工具,但是对于一次性转换,您不应使用 git-svn,而应该使用 svn2git,它更适合这种用例,并且不应遇到 OOM 错误。

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

如果您对存储库的历史记录不确定,请使用 svneverever(来自 http://blog.hartwork.org/?p=763)调查迁移到 Git 时的 SVN 存储库的历史记录。


尽管 git-svn(或您的错误 svn2git)更容易入门,但以下是使用 KDE svn2git 而不是 git-svn 更优越的一些进一步原因,除了其灵活性:

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

有许多原因说明为什么 git-svn 更差,而 KDE svn2git 更优越。 :-)


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