代码之家  ›  专栏  ›  技术社区  ›  Daniel Andre

导入多项目SVN存储库不会导入使用SVN copy创建的所有文件

  •  0
  • Daniel Andre  · 技术社区  · 7 年前

    我们的存储库设置与此类似: https://daneomatic.com/2010/11/01/svn-to-multiple-git-repos/ ,并且遵循那篇文章中的建议——虽然已经过时——会导致正确地拆分存储库。

    将项目拆分为不同存储库的实际过程是可以的,但在将svn存储库导入git时,导入完成后,几个文件和文件夹不存在。

    我跟踪到了svn日志中显示它们是从svn树中的其他位置复制过来的文件和文件夹,无论我在运行时使用什么标志 git svn clone (例如指定 trunk ,使用 filter-branch git-svn 无法解析svn cp,导致导入完成后丢失文件和文件夹。

    有人有这方面的经验吗,我可以在上面使用的旗帜 git svn ,还是完成这样导入的工具建议?我想完成导入,保持历史的完整性。

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

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

    有很多工具叫做 svn2git ,可能最好的是KDE https://github.com/svn-all-fast-export/svn2git . 我强烈建议使用它 svn2git

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

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


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

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

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