代码之家  ›  专栏  ›  技术社区  ›  Idris.AH

如何签出包含所有历史记录、标记和版本的整个SVN存储库

  •  5
  • Idris.AH  · 技术社区  · 7 年前

    我有一个非常大的SVN存储库(近6000个修订版),我需要将其迁移到Git。存储库托管在内部服务器上。我想把所有的历史,标签和版本迁移到Git,并在Git格式中有分支等。

    到目前为止,我已经在我的机器上安装了TortoiseSVN,并一直在尝试使用git svn克隆,然而,很多文件夹太大,我得到块大小错误。同时,一些文件的文件路径中包含非法字符,因此在迁移过程中会被跳过。

    我还尝试使用TortoiseSVN将工作副本签出到我的本地机器中,然后尝试通过设置本地 svnserve (设置为Windows服务),但是,我无法使用 svn://localhost/... 我跟随导游( https://subversion.open.collab.net/articles/svnserve-service.htm )将其设置为服务,我可以访问例如。 svn://localhost/dev ,但是,当我通过Tortoise将文件签出到此文件夹时,它不会通过 svn://localhost/dev/<sub-folder> 很明显我做错了什么,但我不确定是什么。

    结构如下:

    repository (top level)
     - folder 1
       - sub-folder 1
       - sub-folder 2
       - ...
     - folder 2
       - sub-folder 1
       - ...
     - ...
    

    最后,我尝试使用svn2git,但在这种情况下也会出错。

    迁移的最佳方式是什么?或者我做错了什么? 感谢您的帮助!

    1 回复  |  直到 7 年前
        1
  •  5
  •   Vampire    7 年前

    对于一次性迁移 git-svn 用于转换存储库或存储库部分的正确工具。如果您想将Git用作现有SVN服务器的前端,这是一个很棒的工具,但对于一次性转换,您应该 使用 git svn 但是 svn2git 这更适合这个用例。

    有很多工具叫做 svn2git ,可能最好的是KDE https://github.com/svn-all-fast-export/svn2git . 我强烈建议使用它 svn2git 工具这是我所知道的最好的,它是非常灵活的,你可以用它的规则文件。

    我猜你用的是nirvdrum svn2git 一那一个有效地调用了 git svn 然后进行一些后处理以克服 git svn ,但你也会犯同样的错误 git svn .

    您将能够轻松配置 svn2git s规则文件,以从当前SVN布局中生成您想要的结果,包括可能存在的任何类似您的复杂历史,包括从一个SVN回购中生成多个Git回购,或者如果您愿意,可以在一次运行中将不同的SVN回购干净地组合成一个Git回购。

    如果您不是百分之百了解存储库的历史, svneverever 从…起 http://blog.hartwork.org/?p=763 是一个很好的工具,可以在将SVN存储库迁移到Git时研究其历史。


    尽管 git svn 或者nirvdrum svn2git 更容易开始,这里有一些使用KDE的进一步原因 svn2git git svn 除了灵活性外,它还具有优越性:

    • 历史重建得更好更干净 svn2git (如果使用正确的历史记录),对于具有分支和合并等的更复杂的历史记录尤其如此
    • 标记是真实的标记,而不是Git中的分支
    • 具有 git svn 这些标记包含一个额外的空提交,这也使它们不是分支的一部分,因此是正常的 fetch 在你付出之前不会得到它们 --tags 默认情况下,只提取指向已提取分支的标记。使用适当的svn2git标记就是它们所属的位置
    • 如果您更改了SVN中的布局,您可以使用 svn2git 具有 git svn 你最终会失去历史
    • 具有 svn2git 您还可以轻松地将一个SVN存储库拆分为多个Git存储库
    • 或者将同一个SVN根中的多个SVN存储库轻松组合到一个Git存储库中
    • 使用正确的 svn2git 比使用 git svn

    你看,有很多原因 更糟糕的是KDE svn2git 优于.:-)