Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将具有公共主干的大型SVN repo迁移到Git_Git_Svn_Version Control_Version Control Migration - Fatal编程技术网

将具有公共主干的大型SVN repo迁移到Git

将具有公共主干的大型SVN repo迁移到Git,git,svn,version-control,version-control-migration,Git,Svn,Version Control,Version Control Migration,我需要将一个具有提交历史的巨大SVN主干迁移到Git。SVN存储库具有以下结构: branches/ project1-branch1 project1-branch2 project2-branch1 project2-branch2 tags/ project1-1.0 project1-1.1 trunk/ project1/ project2/ project3/ project4/ 我只对将主干中的每个项

我需要将一个具有提交历史的巨大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在一段时间后停止响应。

因为版本SubGit可以处理单个目录(在早期版本中,它需要您编写的主干、分支和标记)。要做到这一点,你可以跑步

$ subgit configure --svn-url <URL>/trunk/project1 --layout directory repo1.git
# adjust repo1.git/subgit/config configuration
$ subgit install repo1.git
在上面的“调整”步骤中,选择repo1.git/subgit/config文件的结尾。这将关闭EOLs转换

当SubGit似乎没有进展时,它可能会检查您的主干,正如您所说的,它是巨大的。它会写入一些~/.subgit/logs/文件,因此您可以通过查看这些文件来跟踪进度。获取第一个修订后,它将显式显示进度


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

对于如此简单的任务,您可以

  • 阅读
  • 请参阅基本示例部分中的案例(跟踪单个URL)
  • 尝试对trunk中的每个项目使用
    git svn clone URL/trunk/project*

  • 我只想执行一次性迁移(不同步)。文档内容为“运行SubGit configure命令以使SubGit创建空的裸Git存储库并将其与Subversion中的项目链接。”“SubGit configure”准备默认配置文件,“SubGit install”链接并同步存储库。当“subgit安装”完成时,只需运行“subgit卸载——purge repo1.git”。它将禁用同步并删除与子Git相关的文件。这是使用SubGit的一次性迁移(当然是免费的)。顺便说一句,您可以运行“git update ref refs/notes/commits refs/svn/map”使“git log”显示修订号。@DmitryPavlenko,“当子git似乎没有进展时”,在某些情况下,日志会长时间保持不变。我在repo目录中使用:
    sudo tcpdump-I wlan0 host svn.host.com和端口433
    监视-n 5 du-s.
    ,以进行监视;-)目前我只是尝试SubGit。
    [translate]
      eols=false