我正在尝试使用git svn
以下命令对大型 subversion 存储库进行从 subversion 到 Git 的单向迁移(重要的是迁移后仅使用 Git):
git svn clone --no-minimize-url --trunk=/trunk/GBI --branches=/branches/GBI --tags=/tags/GBI --authors-file=authors.txt https://yyy/svn-repos/zzz/ GBI
Run Code Online (Sandbox Code Playgroud)
运行几个小时后,克隆进程崩溃并出现以下错误:
r79791 = 00349b8063f90447ea8a040751cd2a40e74b74f3 (refs/remotes/origin/trunk)
Error from SVN, (175009): Malformed network data: The XML response contains invalid XML: Malformed XML: no element found
Run Code Online (Sandbox Code Playgroud)
然后我想也许有一种聪明的方法可以在违规修订后立即恢复流程......这可能吗?
任何想法首先导致此错误的原因是什么?
这个问题的答案建议首先使用--log-window-size
来防止这个问题发生......我可以添加该选项并从失败的修订版中重试吗?这个问题是git svn
内存使用问题还是仅与损坏的颠覆修订版有关的问题?
是否有一个git svn 选项来强化过程以忽略错误,而不仅仅是由于此错误而停止冗长的过程?
更新:我按照Atlassian Stash Migrating to Git 指南到达了这一点,该指南指示使用git svn
及其svn-migration-scripts.jar
实施
Vam*_*ire -1
git-svn
不是用于一次性转换存储库或存储库部分的正确工具。如果您想使用 Git 作为现有 SVN 服务器的前端,那么它是一个很棒的工具,但对于一次性转换,您不应该使用,git-svn
但svn2git
它更适合此用例。
有很多名为 的工具,最好的可能是来自https://github.com/svn-all-fast-export/svn2gitsvn2git
的 KDE 工具。我强烈建议使用该工具。这是我所知道的最好的,并且它的规则文件非常灵活。svn2git
如果您不是 100% 了解存储库的历史记录,svneverever
http ://blog.hartwork.org/?p =763 是一个很好的工具,可以在将 SVN 存储库迁移到 Git 时调查其历史记录。
尽管 git-svn 更容易上手,但除了它的灵活性之外,这里还有一些使用 KDEsvn2git
而不是git-svn
更优越的进一步原因:
svn2git
(如果使用了正确的历史记录),对于具有分支和合并等的更复杂的历史记录尤其如此git-svn
一个额外的空提交,这也使得它们不属于分支的一部分,因此在您向命令fetch
提供之前,普通不会获取它们,因为默认情况下,也只获取指向所获取分支的标签。--tags
有了正确的 svn2git 标签,它们就在它们所属的地方svn2git
,git-svn
最终您将丢失历史记录svn2git
可以轻松地将一个 SVN 存储库拆分为多个 Git 存储库svn2git
使用正确的转换比使用正确的转换快数亿倍git-svn
有很多原因可以解释为何git-svn
KDE 更差而 KDEsvn2git
更优越。:-)