Svn->;使用多个主干/分支/标记进行git迁移

Svn->;使用多个主干/分支/标记进行git迁移,svn,git,git-svn,Svn,Git,Git Svn,我有一个SVN存储库,其当前结构如下: 项目1 分支机构 树干 标签 项目2 分支机构 树干 标签 最初的结构如下: 计划 分支机构 树干 proj1 项目2 标签 也就是说,项目被分为两个独立的“子存储库”(或您想称之为子存储库的任何东西) 是否有任何方法可以在不丢失历史记录的情况下将其迁移到git? 对于这种情况,svn2git会比git svn更好吗?还有其他迁移工具吗 编辑:我按照建议尝试了git svn clone,但正如我所想,它没有遵循从旧结构到新结构的移动

我有一个SVN存储库,其当前结构如下:

  • 项目1
    • 分支机构
    • 树干
    • 标签
  • 项目2
    • 分支机构
    • 树干
    • 标签
最初的结构如下:

  • 计划
    • 分支机构
    • 树干
      • proj1
      • 项目2
    • 标签
也就是说,项目被分为两个独立的“子存储库”(或您想称之为子存储库的任何东西)

是否有任何方法可以在不丢失历史记录的情况下将其迁移到git? 对于这种情况,svn2git会比git svn更好吗?还有其他迁移工具吗


编辑:我按照建议尝试了git svn clone,但正如我所想,它没有遵循从旧结构到新结构的移动。它只导入了新结构中的修订版本。

您是否已经尝试了内置版本

git svn clone

您的“当前”结构已经具有以前结构的所有历史记录。因此,使用克隆每个项目应该可以很好地工作

无需告诉Git以前的结构,在主干目录下有多个项目


Git的好处在于,您可以尝试迁移任意次数,直到您对结果感到满意。

svn2git只在下面使用“Git svn”,因此它本身不会“更好”。它只是制作了很好的标签和分支,并清理了一些东西,以便与svn彻底决裂。如果这是您想要的,我将继续在两个子存储库上分别使用它。它将获得所有适当的历史记录。

使用
git svn clone-s svn_REPOS
让git克隆Subversion存储库,并采用标准的Subversion布局。您将获得一个名为master的本地git分支,但是
git分支-a
将显示所有远程分支。Subversion分支将只具有分支名称,但标记将具有分支名称
tags/tag\u name

在本地克隆时不要重用分支/标记名称!吉特不喜欢那样

这本指南对我帮助很大


首先,我将主干转换为git:

git svn clone url-to-project -s
然后我转换了每个项目:

git svn clone url-to-project1 -s
git svn clone url-to-project2 -s
...
然后,对于每个项目,我使用嫁接和过滤分支从主干附加了以前的历史记录


我只是。

没有跟随从旧结构到新结构的移动:-(它没有跟随从旧结构到新结构的移动:-)(不知道svn2git使用git svn…但是git svn没有跟随从旧结构到新结构的移动:-(git svn没有跟随从旧结构到新结构的移动:-(如果
git svn
没有“获取”旧的结构,您就已经把创建当前结构的工作搞砸了,因为
git svn
确实遵循了第一次修订的历史。@Bombe:是的,我也这么认为……我想我有一个解决方法,如果可行的话,我会在这里发布它。