【问题标题】:Svn -> git migration with several trunk/branches/tagsSvn -> 带有多个主干/分支/标签的 git 迁移
【发布时间】:2009-10-08 21:07:20
【问题描述】:

我有一个具有以下当前结构的 SVN 存储库:

  • 项目1
    • 分支机构
    • 主干
    • 标签
  • 项目2
    • 分支机构
    • 主干
    • 标签

最初有这样的结构:

  • 项目
    • 分支机构
    • 后备箱
      • 项目1
      • 项目2
    • 标签

也就是说,该项目被分成两个独立的“子存储库”(或任何你想称之为的)

有没有办法将它迁移到 git 而不丢失历史记录? 对于这种情况,svn2git 会比 git-svn 更好吗?还有其他迁移工具吗?

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

【问题讨论】:

  • 如果git-svn 没有“获得”旧结构,您已经搞砸了创建当前结构,因为git-svn 确实遵循历史到第一个修订版。跨度>
  • @Bombe:是的,我也这么认为...我想我有一个解决方法,如果可行,我会在这里发布。

标签: svn git git-svn


【解决方案1】:

首先我把主干转成git:

git svn clone url-to-project -s

然后我转换了每个项目:

git svn clone url-to-project1 -s
git svn clone url-to-project2 -s
...

然后对于每个项目,我使用移植物和过滤器分支从主干附加了以前的历史记录。

我只是blogged about it

【讨论】:

    【解决方案2】:

    svn2git 只是在下面使用“git svn”,所以它本身不会“更好”。它只是制作了漂亮的标签和分支,并清理了一些东西,以便彻底摆脱 svn。如果这就是你想要的,我会继续在两个子存储库上单独使用它。它将获取所有适当的历史记录。

    【讨论】:

    • 不知道 svn2git 使用了 git-svn...但是 git-svn 并没有跟随从旧结构到新结构的迁移:-(
    【解决方案3】:

    您是否已经尝试过内置

    git svn clone
    

    git-svn

    【讨论】:

    • 没有跟随从旧结构到新结构的转变:-(
    【解决方案4】:

    您的“当前”结构已经包含之前结构的所有历史记录。因此,使用git svn clone 克隆每个项目应该可以正常工作。

    没有必要告诉 Git 之前的结构,主干目录下有多个项目。

    Git 的伟大之处在于,您可以多次尝试迁移,直到对结果满意为止。

    【讨论】:

    • git-svn 没有跟随从旧结构到新结构的迁移:-(
    【解决方案5】:

    使用git svn clone -s SVN_REPOS 让 git 克隆 Subversion 存储库,假设标准 Subversion 布局。您将获得一个名为 master 的本地 git 分支,但git branch -a 将向您显示所有远程分支。 Subversion 分支只有分支名称,但标签的分支名称为tags/tag_name

    在本地克隆时不要重复使用分支/标签名称! git 不喜欢那样。

    本指南对我帮助很大。

    http://www.viget.com/extend/effectively-using-git-with-subversion/

    【讨论】:

    • 它没有跟随从旧结构到新结构的移动:-(
    猜你喜欢
    • 2012-10-19
    • 2017-04-08
    • 2021-09-24
    • 1970-01-01
    • 2012-09-14
    • 2016-02-02
    • 2011-06-13
    • 2011-07-05
    • 1970-01-01
    相关资源
    最近更新 更多