git - 将大型 SVN 存储库迁移到 Git 失败的内存不足异常

标签 git svn git-svn

我正在尝试对一个非常大的 SVN 存储库进行 git svn 克隆。我已经使用 git svn clone 完成了早期的迁移具有完整的分支、标签和历史记录,并且一切顺利。
但是这次运行了一段时间后的脚本抛出了一个错误:
libsvn: Out of memory - terminating application.18 [main] perl 13884 cygwin_exception::open_stackdumpfile: Dumping stack trace to perl.exe.stackdump
我到处研究,但找不到与此相关的任何内容。如果有人遇到类似的错误,我将不胜感激任何建议。

最佳答案

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

有很多工具叫做 svn2git ,最好的可能是来自 https://github.com/svn-all-fast-export/svn2git 的 KDE 版本。 .我强烈建议使用 svn2git工具。这是我所知道的最好的,而且它的规则文件非常灵活。

如果您不是 100% 了解您的存储库的历史,svneverever来自 http://blog.hartwork.org/?p=763是一个很好的工具,可以在将 SVN 存储库迁移到 Git 时调查其历史记录。

即使 git-svn (或错误的 svn2git 在您的情况下)更容易开始,以下是使用 KDE svn2git 的一些进一步原因而不是 git-svn优越,除了它的灵活性:

  • 历史通过 svn2git 重建得更好更干净(如果使用正确的),对于具有分支和 merge 等更复杂的历史记录尤其如此
  • 标签是真正的标签,而不是 Git 中的分支
  • git-svn标签包含一个额外的空提交,这也使它们不属于分支,所以正常 fetch除非你给 --tags到命令,默认情况下,也只获取指向已获取分支的标签。正确的 svn2git 标签是它们所属的地方
  • 如果您更改了 SVN 中的布局,您可以使用 svn2git 轻松配置它, 与 git-svn你最终会失去历史
  • svn2git您还可以轻松地将一个 SVN 存储库拆分为多个 Git 存储库
  • 或将同一个 SVN 根目录中的多个 SVN 存储库轻松 merge 为一个 Git 存储库
  • 使用正确的 svn2git,转换速度快了无数倍比git-svn

  • 原因有很多git-svn更糟的是 KDE svn2git是优越的。 :-)

    关于git - 将大型 SVN 存储库迁移到 Git 失败的内存不足异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40999651/

    相关文章:

    android - 没有更改提交 Android studio SVN

    svn - 不小心提交了 .svn 目录

    ASP.NET 安装项目 - 如何包含不在 VS 中的静态文件?

    git-svn dcommit 错误 : unable to determine upstream SVN information

    python - 是否应该将 toml 文件添加到 python 诗歌管理项目的版本控制中?

    git-branch - 有没有更好的方法来查明是否存在本地 git 分支?

    git - egit 和 git unstaged 文件显示不同的状态

    git - 如何欺骗 git-svn 来识别用 svn 进行的 merge ?

    GIT - 我应该忽略 Makefile 以及 IDE 生成的其他文件吗?

    xcode - 该文件不受版本控制