5

我有一个非常大的 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,但是在这种情况下我也遇到了错误。

进行迁移的最佳方法是什么和/或我做错了什么?任何帮助表示赞赏!

4

1 回答 1

5

因为一次性迁移git-svn不是转换存储库或部分存储库的正确工具。如果您想使用 Git 作为现有 SVN 服务器的前端,这是一个很棒的工具,但对于一次性转换,您不应该使用,但它更适合这个用例。git-svnsvn2git

有很多称为svn2git的工具,可能最好的是来自https://github.com/svn-all-fast-export/svn2git的 KDE 工具。我强烈建议使用该svn2git工具。这是我所知道的最好的,并且在你可以用它的规则文件做什么方面非常灵活。

我猜你改用了 nirvdrum 那个svn2git。那一个有效地调用git-svn然后进行一些后处理来克服 的一些缺点git-svn,但是您当然会遇到与git-svn.

您将能够轻松配置svn2gits 规则文件以从当前 SVN 布局中生成所需的结果,包括可能存在的任何复杂历史,包括从一个 SVN 存储库中生成多个 Git 存储库或将不同的 SVN 存储库合并到一个 Git 中如果您愿意,可以一次性干净地回购。

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


尽管git-svnnirvdrumsvn2git更容易上手,但除了灵活性之外,还有一些使用 KDEsvn2git代替KDE 更优越的原因:git-svn

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

你看,有很多原因导致git-svnKDE 更差而 KDEsvn2git更胜一筹。:-)

于 2017-11-21T10:23:14.043 回答