将 SVN 存储库转换为 git

Converting SVN repo to git

我有一个非常大的 svn 存储库,其结构类似于以下内容。我在一个大项目中有多个 repositories/projects。我一直在设置 svn2git 以将 svn 传输到 git,但似乎我必须一个接一个地完成每个项目。是否有 easier/more 自动将此 svn 存储库移动到 git 的方法?我确实想确保保留提交历史等。

我不完全确定这个命令是否会将每个 "project" 放入它自己的文件夹中: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

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

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

如果您不是 100% 了解存储库的历史,http://blog.hartwork.org/?p=763 中的 svneverever 是一个很好的工具,可以在将 SVN 存储库迁移到 Git 时调查其历史.

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


尽管 git-svn 更容易上手,但除了它的灵活性之外,这里还有一些为什么使用 KDE svn2git 而不是 git-svn 更优越的原因:

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

git-svn 更差而 KDE svn2git 更好的原因有很多。 :-)