我有一个非常大的svn存储库(将近6000个修订版),需要迁移到git。存储库托管在内部服务器上。我想把所有的历史记录、标签和版本迁移到git,并用git格式创建分支等。
到目前为止,我已经在我的机器上安装了tortoisesvn,并且一直在尝试使用git svn clone,但是,很多文件夹太大,我得到块大小错误。同时,有些文件的文件路径中有非法字符,因此在迁移过程中会被跳过。
我也曾尝试使用TortoiseSVN将工作副本签入本地计算机,然后尝试通过设置本地svnserve(设置为Windows服务)将其迁移,但是,我永远无法使用svn://localhost/...访问文件我遵循指南(https://subversion.open.collab.net/articles/svnserve-service.htm)将其设置为服务,并且我可以访问例如svn://localhost/dev,但是,当我通过tortoise将文件签入这个文件夹时,它不会通过svn://localhost/dev/<sub-folder>看到它们,显然我做错了,但是,我不确定是什么。
结构如下:

repository (top level)
 - folder 1
   - sub-folder 1
   - sub-folder 2
   - ...
 - folder 2
   - sub-folder 1
   - ...
 - ...

最后,我尝试过使用svn2git,但在这种情况下也会出现错误。
迁移的最佳方式是什么和/或我做错了什么?
感谢您的帮助!

最佳答案

对于一次性迁移,git-svn不是用于转换存储库或部分存储库的正确工具。如果您想使用Git作为现有的VPN服务器的前端,这是一个很好的工具,但是对于一次性转换,您不应该使用git-svn,但是svn2git它更适合这个用例。
有很多称为svn2git的工具,最好的可能是https://github.com/svn-all-fast-export/svn2git中的kde工具。我强烈建议使用svn2git工具。这是我所知道的最好的,它可以很灵活地处理它的规则文件。
我猜你用的是Nirvdrum。这个函数有效地调用svn2git,然后进行一些后处理,以克服git-svn的一些缺点,但是您会得到与git-svn相同的错误。
您将能够很容易地配置git-svn规则文件,以从当前的VPN布局中生成所需的结果,包括可能存在的任何复杂历史,包括从一个VPN回购中生成几个Git副本,或者在一个运行中将不同的SN RePs组合成一个Git回购,如果您愿意的话。
如果您不是100%了解存储库的历史,svn2gitfromhttp://blog.hartwork.org/?p=763是一个很好的工具,可以在将svn存储库迁移到git时调查其历史。
尽管svneverever或NrvLultgit-svn更容易开始,但这里还有一些进一步的理由,为什么使用KDE svn2git而不是svn2git是优越的,除了它的灵活性:
通过git-svn(如果使用正确的方法)可以更好、更清晰地重建历史,对于分支和合并等更复杂的历史尤其如此
标记是真正的标记,而不是git中的分支。
使用svn2git时,标记包含一个额外的空提交,这也会使它们不属于分支,因此正常的git-svn在您将fetch交给命令之前不会获取它们,因为默认情况下,也只获取指向已获取分支的标记。有了合适的svn2git标签
如果您在svn中更改了布局,您可以使用--tags轻松配置它,使用svn2git您最终将丢失历史记录
使用git-svn还可以轻松地将一个svn存储库拆分为多个git存储库
或者将同一个svn根目录中的多个svn存储库轻松组合到一个git存储库中
正确的svn2git比正确的svn2git转换快上百万倍。
你看,git-svn更差,kdegit-svn更优的原因有很多。:-)

07-24 13:20