【问题标题】:git svn migration failing to pull the older historygit svn 迁移未能提取较旧的历史记录
【发布时间】:2017-09-25 22:15:00
【问题描述】:

我正在尝试将项目“A”从 svn 迁移到 git。不幸的是,直到 5 年前,当 subversion 中的这个项目“A”从不同的 svn 位置移动到当前位置时,迁移才拉动提交。因此,直到重定位点之前的所有历史都可以正常迁移,但之前的历史在 eclipse 的 svn 存储库资源管理器中可见,但无法获取。我们还能做些什么来获取这些信息吗?

【问题讨论】:

  • 这是一次性转换,然后只使用 Git,还是要从 Git 克隆提交回 SVN 存储库?

标签: git svn git-svn


【解决方案1】:

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

有很多称为svn2git 的工具,可能最好的一个是来自https://github.com/svn-all-fast-export/svn2git 的KDE 工具。我强烈推荐使用svn2git 工具。它是我所知道的最好的,并且在你可以使用它的规则文件做什么方面非常灵活。

您将能够轻松配置svn2gits 规则文件,以从当前 SVN 布局中生成您想要的结果,包括可能存在的任何复杂历史记录,包括从一个 SVN 存储库生成多个 Git 存储库或组合不同的 SVN如果您愿意,可以一次运行干净地 repos 到一个 Git repo 中。

如果您不是 100% 了解存储库的历史记录,那么在将 SVN 存储库迁移到 Git 时,http://blog.hartwork.org/?p=763 中的 svneverever 是一个很好的工具来调查它的历史记录。


尽管git-svn 更容易开始,这里还有一些其他原因说明为什么使用 KDE svn2git 而不是 git-svn 除了灵活性之外更胜一筹:

  • svn2git(如果使用正确的)重建历史记录会更好更干净,尤其是对于具有分支和合并等的更复杂的历史记录而言
  • 标签是真正的标签,而不是 Git 中的分支
  • git-svn 标签包含一个额外的空提交,这也使它们不属于分支,因此在您将--tags 提供给命令之前,普通的fetch 不会得到它们,因为默认情况下只有标签指向提取的分支也被提取。使用正确的 svn2git 标签是它们所属的地方
  • 如果您在 SVN 中更改了布局,您可以使用 svn2git 轻松配置它,使用 git-svn 您最终会丢失历史记录
  • 使用svn2git,您还可以轻松地将一个 SVN 存储库拆分为多个 Git 存储库
  • 或轻松将同一 SVN 根目录中的多个 SVN 存储库合并到一个 Git 存储库中
  • 正确的svn2git 的转换速度比git-svn 快无数倍

您知道,git-svn 更差而 KDE svn2git 更优的原因有很多。 :-)

【讨论】:

  • 我们需要linux盒子还是可以在mac上完成?找不到基于 mac 的好文章,用于安装开发者工具以运行该应用程序。
  • 我什至在 Windows 上也成功了。所以我猜它在Mac上也应该是可行的。如果你没有让它在 Mac 上运行,只需在虚拟机内运行 Linux 启动 VirtualBox。 :-)
猜你喜欢
  • 2020-12-01
  • 2019-01-30
  • 2021-09-30
  • 1970-01-01
  • 1970-01-01
  • 2014-12-22
  • 2021-08-16
  • 2013-08-02
  • 1970-01-01
相关资源
最近更新 更多