将具有公共主干的巨大 SVN 存储库迁移到 Git

Migrate huge SVN repo with common trunk to Git

我需要将具有提交历史的非常巨大的 SVN 主干迁移到 Git。 SVN 存储库具有以下结构:

branches/
    project1-branch1
    project1-branch2
    project2-branch1
    project2-branch2
tags/
    project1-1.0
    project1-1.1
trunk/
    project1/
    project2/
    project3/
    project4/

我只对将主干中的每个项目移动到相应的 Git 存储库感兴趣——并不真正关心标签和分支。如果我错了请纠正我,但我相信 Git 不适用于非常大的存储库。

过去也有人问过类似的问题,但它们已经很老了,只是想知道是否有人对解决这个问题有新的看法。我尝试了几个工具,例如 SubGit,但它们假定每个项目都在它自己的文件夹中,并且具有主干、分支和标签层次结构。当我尝试明确指定主干文件夹并将标签和分支指向一个空文件夹时,SubGit 只是在一段时间后停止响应。

自版本 3.0 以来,SubGit 可以处理单个目录(在早期版本中,它需要 t运行k、分支和您编写的标签)。为此,您可以 运行

$ subgit configure --svn-url <URL>/trunk/project1 --layout directory repo1.git
# adjust repo1.git/subgit/config configuration
$ subgit install repo1.git

如果您的存储库没有遵循最佳实践并且有很多文件没有设置 svn:eol-style,您最好添加

[translate]
  eols=false

repo1 末尾的选项。git/subgit/config 文件在上面的 "adjust" 步。这将关闭 EOL 翻译。

当 SubGit 似乎没有进展时,它可能会检查您的 t运行k,正如您所说,它很大。它写入一些 ~/.subgit/logs/ 文件,因此您可以通过查看那里来跟踪进度。获取第一个修订版后,它会明确显示进度。

免责声明:我是 SubGit 开发人员之一。

这么简单的任务你可以

  1. 阅读Git-svn doc
  2. 在基本示例部分查看您的案例(曲目单曲 URL)
  3. 尝试对主干中的每个项目使用git svn clone URL/trunk/project*