【问题标题】:'Can't create session Unable to connect to repo' when trying to migrate svn to git尝试将 svn 迁移到 git 时“无法创建会话无法连接到 repo”
【发布时间】:2017-05-15 06:35:42
【问题描述】:

我正在尝试将我的本地 svn 存储库迁移到 git。我一直在按照这篇文章的步骤进行操作:How to migrate SVN repository with history to a new Git repository?

更具体地说,this answer(似乎是最简单的)。问题是每当我尝试从我的 svn 存储库中获取时,我都会不断收到:

无法创建会话:无法连接到 URL 'file:///mypathtorepo' 上的存储库

我的存储库当前位于我的本地计算机上,这就是我使用“file:///”目录路径的原因。我也试过 'svn://localhost/mypathtorepo' 无济于事。我该如何解决?

【问题讨论】:

  • 那么您实际拥有的目录路径是什么? file:// 是协议,后面的斜杠是路径的一部分。
  • 这是一次性转换还是您打算从 Git 存储库提交回 SVN 存储库?
  • 这将是一次转换。我想完全切换到 git。我已经阅读了一些将协议转换为 svn:// 在这种情况下帮助其他人的地方,但我不太确定如何做到这一点。我将使用的路径是 file:///c:/Users/UserName/Desktop/repo
  • 你试过“git svn clone

标签: git svn repository git-svn


【解决方案1】:

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

有很多工具叫做svn2git,可能最好的一个是来自https://github.com/svn-all-fast-export/svn2git 的KDE 工具。我强烈推荐使用svn2git 工具。这是我所知道的最好的,并且在你可以用它的规则文件做什么方面非常灵活。由于它无论如何都需要本地存储库文件,因此您有最好的先决条件。

如果您不是 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 更优的原因有很多。 :-)

【讨论】:

  • 每次我想将源从 svn 镜像到 git 时,我都使用 git-svn,除了那些 git 的开发人员可能会在下一个 git 版本中破坏它的问题之外,我看不到它有任何问题。
  • 我不了解其中的大多数,因为在我这边我没有您列出的此类问题。例如,if you changed layout in SVN...you will loose history eventually。你不会在这里丢失任何东西,你只是在 SVN 中为分支保存了特定的历史记录。如果某些东西超出了分支或标签 - 它不会保存。或者with svn2git you can also split one SVN repository into multiple Git repositories easily,使用 git-svn 你也可以这样做。这只是脚本的问题。
  • 不是在更高级的情况下。相信我,我已经转换了相当多的存储库。在非常基本的情况下,git-svn 产生了一半可以接受的结果,但仍然不是很好,与 KDE svn2git 相比,它需要更多的时间。尝试转换具有 100.000 次提交的存储库。与svn2git 相比,git-svn 添加的结果更差,您将等待 2 或 3 周,后者将在 1 或 2 天内完成。如果您对git-svn 结果和等待时间感到满意,请务必使用它。我强烈建议改用更好的工具。
【解决方案2】:

file:/// 很可能无法正常工作,因为您的 SVN 存储库具有比 Git 所知道的更新的 FS 格式。

您使用 svn://localhost 的第二种方法是正确的方向。但是,您需要使用 svnserve 命令行实用程序来托管 repo。比如:

svnserve -d -R --root file://path/to/repo

在让 svnserve 正确托管 repo 后,您可以使用以下开头的路径:svn://localhost

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-05-26
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    • 2020-12-16
    • 1970-01-01
    相关资源
    最近更新 更多