-1

我有一个非常大的 svn 存储库,其结构类似于下面。我在一个大项目中有多个存储库/项目。我一直在设置 svn2git 将 svn 传输到 git,但似乎我必须一个一个地完成每个项目。有没有更简单/更自动的方法将此 svn repo 移动到 git?我确实想确保我保留提交历史等。

我不完全确定这个命令是否会将每个“项目”放入它自己的文件夹中:svn2git https://my_repo/svn/my_repository

我可以看到的一个问题是其中一些项目文件夹没有遵循传统的主干和标签结构。有什么想法我能做到这一点吗?

my_repository
    project1
          trunk
               ...
           tags
               1.0.0
               1.0.1
               1.0.2

     project2
           trunk
               ...
           tags
               1.0.5
               1.0.6
               1.0.7

      project3
           src
               ...
           file1
           file2

       project4
            trunk
               ...
            tags
               1.0.5
               1.0.6
               1.0.7
4

1 回答 1

1

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

从你的问题我看到你没有使用这个svn2git,但是基于git-svn它的红宝石不是一次性转换存储库或存储库部分的正确工具。如果您想使用 Git 作为现有 SVN 服务器的前端,这是一个很好的工具,但对于一次性转换,您不应该使用git-svn.

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

您可以使用其规则文件轻松配置该工具,以准确地制作您想要的内容,包括项目的不同布局以及将您的 SVN 根目录拆分为多个 Git 存储库,但您喜欢。


尽管 git-svn 更容易上手,但除了灵活性之外,还有其他一些使用 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更胜一筹。:-)

于 2016-09-22T08:49:00.900 回答