将SVN存储库拆分为多个Git存储库

时间:2015-12-17 21:21:50

标签: git svn git-svn

我有一个具有此文件结构的SVN存储库:

    |---trunk
    |   |---project1
    |   |---project2
    |   |---project3
    |
    |--branches
    |   |---1.1
    |       |---project1
    |       |---project2
    |       |---project3
    |   |---1.2
    |       |---project1
    |       |---project2
    |       |---project3
    |--tags
    |   |---1.1
    |       |---project1
    |       |---project2
    |       |---project3
    |   |---1.2
    |       |---project1
    |       |---project2
    |       |---project3

我想将所有内容迁移到Git(保留历史记录),以便之后我有3个git项目:project1,project2和project3。

为了做到这一点,我认为为每个项目创建一个新的存储库然后将每个存储库迁移到Git是个好主意。

我在网上搜索但是我找不到这个文件结构的解决方案。我应该使用SVN过滤器还是什么? (我对SVN知之甚少。)

1 个答案:

答案 0 :(得分:1)

虽然可以使用SVN拆分存储库,但使用git更容易实现这一点,git在重写和重新组织历史时更加灵活。如果您仍然坚持,请参阅以下内容: - )。

所以我的建议是:

  • 或者:首先将repo转换为git,然后将其拆分。对于拆分,请参阅例如问题Split large Git repository into many smaller ones(顺便提一下也描述了从SVN的迁移)。
  • 或者:通过逐个转换回购来一次转换和拆分。转换为git时,你可以告诉git只导入/转换一个SVN文件夹(包含历史记录和子文件夹)。这样,您就可以立即为SVN存储库的各个部分创建一个git存储库。

如果你必须使用Subversion进行拆分,我看到的唯一现实选择是使用svnadmin dumpsvndumpfilter

基本上,您将整个存储库转储到一个文件(需要管理员访问SVN服务器),然后修改该转储文件并从中创建新的SVN存储库。拆分(例如)在“版本控制与Subversion”一书中解释,章节Repository Maintenance - 特别是“过滤存储库历史”小节。

有关拆分+迁移的详细说明,请参阅CollabNet的示例Migrating Subversion Repositories to Git – The definitive Guide for TeamForge Users(具有讽刺意味的是,创建Subversion项目的公司)。