将复杂的分支层次结构从SVN迁移到Git

时间:2011-05-31 13:14:29

标签: svn git

如何将具有数百个分支的大型SVN存储库(几个GB)迁移到Git存储库?没有找他们并肩工作,只是一种摆脱SVN的方法。

从我用git svn完成的一些实验中,不清楚如何指定复杂的分支层次结构。特别是当分支经常在SVN中删除时......

这是我正在谈论的那种层次结构的一个例子:

trunk/
tags/
vendors/boost/
branches/ProjectA/
branches/ProjectA/MajorVersion/
branches/ProjectA/MajorVersion/MinorVersion/
branches/Experimental1/
branches/RecycleBin/OldDiscardedBranch

关键是一个简单的正则表达式或通配符无法捕获所有分支的正确位置。

有没有办法将所有这些分支位置信息提供给Git? git-svn在尝试迁移属于已删除分支的修订时会做什么?

1 个答案:

答案 0 :(得分:2)

我一直在寻找用不同的回购做类似的事情。我思考和玩耍的最终结果是你需要做一些事情:

  • 使用git filter-branch从一些项目重写到另一个项目。 IE,使用git filter-branch将子目录中的所有内容重命名为父目录。就我而言,我在 trunk 下有多个模块,而我正在使用filter-branch将一个目录中的所有内容移到顶部。
  • 也为每个分支执行此操作,但也删除与特定项目无关的任何分支

这样最终你将拥有多个git回购,每个回购只包含一个项目(应该是这样)。

如果分支/标签目录很复杂,git svn clone命令将允许您使用逗号指定多个标签和分支目录(如果我记得的话)。

此外,在完成提取所有内容后运行git gc --aggressive以缩小repo大小。