2016-09-21 206 views
-1

我有一个相当大的svn库有结构类似下面。我在一个大项目中有多个存储库/项目。我一直在建立svn2git转移SVN与git,但好像我有一个做的每一个项目之一。有没有一种更容易/更自动的方式将此svn库回迁到git?我想确保我把提交历史等转换SVN回购与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 

回答

1

有所谓svn2git pleny工具中,可能最好的一个是KDE一个从https://github.com/svn-all-fast-export/svn2git。我强烈建议使用svn2git工具。这是我知道可以在那里最好的,它是你可以用它的规则文件做什么非常灵活。

从你的问题我看你是不是用这个svn2git,但是这是基于git-svn红宝石一个是的仓库或储存库零件的一次性转换的工具。这是一个伟大的工具,如果你想使用Git的作为前端为现有的SVN服务器,但对于一次性转换,你应该使用git-svn

如果您不是100%关于存储库的历史记录,svneverever from http://blog.hartwork.org/?p=763是一个很好的工具,用于在将SVN存储库迁移到Git时调查SVN存储库的历史。

您可以轻松地与它的规则文件配置工具,让你想要什么,包括differeing布局项目和分裂你的SVN根成多个Git仓库,只要你喜欢。


即使混帐SVN比较容易下手,这里有一些进一步的原因,使用KDE svn2git而不是git-svn优越,除了它的灵活性:

  • 历史重建要好得多和更清洁的svn2git(如果使用正确的),这是更复杂的分支和合并的历史尤其如此
  • 标签是真正的标签,而不是Git分支
  • git-svn标签包含一个额外的空提交这也使得分支机构他们不要的部分,所以直到你给--tags的命令,默认情况下只标记指向获取分支还端来一正常fetch不会得到他们。有了正确的svn2git标签是属于他们的地方
  • ,如果你在SVN改变布局,可以轻松地与svn2git配置此,与git-svn你将失去​​历史最终
  • svn2git你也可以拆分一个SVN仓库分成多个Git仓库容易
  • 或结合在相同的SVN根多个SVN储存库到一个Git仓库容易
  • 转换是用正确的svn2git速度比与极大数倍git-svn

为什么git-svn更糟,KDE svn2git优于其他原因。 :-)