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

Split SVN repository into several Git repositories

我有一个具有以下文件结构的 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了解不多)

虽然可以使用 SVN 拆分存储库,但使用 git 拆分存储库会容易得多,这在重写和重组历史记录时更加灵活。如果你还坚持,请看下面:-).

所以我的建议是:

  • 或者:首先将 repo 转换为 git,然后拆分它。对于拆分,请参见例如问题Split large Git repository into many smaller ones(顺便说一下,它也描述了从 SVN 的迁移)。
  • 或者:通过逐个转换 repo,一次性转换和拆分。转换为git时,只能告诉git import/convert一个SVN文件夹(有历史和子文件夹)。这样,您就可以立即为 SVN 存储库的各个部分创建一个 git 存储库。

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

基本上,您会将整个存储库转储到一个文件(需要管理员访问 SVN 服务器),然后修改该转储文件并从中创建新的 SVN 存储库。拆分在 "Version Control with Subversion" 一章 Repository Maintenance 一章中进行了解释(例如)- 特别是 "Filtering Repository History".

小节

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