我正在将svn存储库迁移到git(gerrit),并且遇到了有关迁移大型存储库的问题。我使用 svn2git。
致命:格式错误的索引信息 10
错误:GIT-SVN 死于信号 11
xxxxxx@svn2git-导入:~$ 连接重置由 XX.XXX.XX.XX
我在 svn2git 中添加了 --log-window-size,它设置为 100000。
感谢您的提前帮助!
我通过在日志窗口大小中添加另一个 0 来解决这个问题。傻我。
只需编辑 svn2git ->/var/lib/gems/2.3.0/gems/svn2git-2.4.0/lib/svn2git/migration.rb
加
--log--窗口大小9999999999999
在
git svn fetch
解决了我的问题!
对于一次性迁移git-svn
不是转换存储库或部分存储库的正确工具。如果你想使用 Git 作为现有 SVN 服务器的前端,这是一个很棒的工具,但对于一次性转换,你不应该使用git-svn
,而是svn2git
更适合这个用例。
有很多工具叫做svn2git
,最好的可能是来自 https://github.com/svn-all-fast-export/svn2git 的KDE。我强烈建议使用该svn2git
工具。这是我所知道的最好的,它非常灵活地处理其规则文件。
您使用的svn2git
工具(可能是 nirvdrums)是基于git-svn
的,因此存在大多数相同的缺点,只是解决了其中的一些缺点。
您将能够轻松配置svn2git
的规则文件,以从当前的 SVN 布局中生成您想要的结果,包括可能存在的任何像您这样的复杂历史记录,包括从一个 SVN 存储库生成多个 Git 存储库,或者如果您愿意,可以在一次运行中将不同的 SVN 存储库干净地组合成一个 Git 存储库。
如果您不是 100% 了解存储库的历史记录,那么 http://blog.hartwork.org/?p=763 中的svneverever
是一个很好的工具,可以在将 SVN 存储库迁移到 Git 时调查其历史记录。
尽管git-svn
或 nirvdrumsvn2git
更容易上手,但除了灵活性之外,以下是使用 KDEsvn2git
而不是git-svn
更优越的其他原因:
- 通过
svn2git
重建历史记录更好、更干净(如果使用正确的历史记录),对于具有分支和合并等的更复杂的历史记录尤其如此 - 标签是真实的标签,而不是 Git 中的分支
- 使用
git-svn
标签包含一个额外的空提交,这也使它们不是分支的一部分,因此在您--tags
命令之前,普通fetch
不会获取它们,因为默认情况下只有指向获取分支的标记也会被获取。使用正确的 svn2git 标签是它们所属的地方 - 如果您在SVN中更改了布局,则可以轻松地使用
svn2git
进行配置,git-svn
最终会丢失历史记录 - 使用
svn2git
您还可以轻松地将一个SVN存储库拆分为多个Git存储库 - 或者轻松地将同一 SVN 根中的多个 SVN 存储库合并到一个 Git 存储库中
- 使用正确的
svn2git
转换比使用git-svn
快很多倍
你看,有很多原因可以解释为什么git-svn
更差,而KDEsvn2git
更胜一筹。