【问题标题】:HG Convert on SVN gives "does not look like a Subversion Repository"SVN 上的 HG Convert 给出“看起来不像 Subversion 存储库”
【发布时间】:2014-02-14 16:45:54
【问题描述】:

我刚刚用 Mercurial-2.9 安装了 TortoiseHG v2.11

我正在尝试转换使用 TortoiseSVN 1.8 创建的本地 Subversion 存储库。 4、颠覆1.8.5

为了确保我的旧 Subversion 存储库没有任何奇怪的怪癖,我使用默认文件夹结构创建了一个名为 test_repo 的新 SVN 存储库,对 test_repowc 执行了 Checkout,然后将一些文本文件添加到主干,然后修改并提交文件几次以提供一些历史记录。

然后我打开 cmd.exe,导航到文件夹并尝试

hg convert test_repo

得到以下结果:

assuming destination test_repo-hg
initializing destination test_repo-hg repository
test_repo does not look like a CVS checkout
test_repo does not look like a Git repository
file:///C:/Users/xxxxxx/Documents/Subversion/test_repo does not look like a Subversion repository
test_repo is not a local Mercurial repository
test_repo does not look like a darcs repository
test_repo does not look like a monotone repository
test_repo does not look like a GNU Arch repository
test_repo does not look like a Bazaar repository
cannot find required "p4" tool
abort: test_repo: missing or unsupported repository

如您所见,Mercurial 为我执行了 file:/// 协议,但无法识别 subversion 存储库。我自己尝试过使用 file:/// 协议,使用 -s 标志指定存储库类型,在文件夹中运行 Mongoose 并将存储库作为 URL 访问,但似乎都不起作用。我也尝试过从工作副本而不是从存储库进行转换,但这也不起作用。

我想知道这是否与 SVN 1.7 或 1.8 引入的新 SVN 文件结构有关(某些 SVN 客户端暂时不兼容)?

有其他人在使用当前版本的 TortoiseSVN 和 TortoiseHG 时遇到过这个问题吗?

我原本打算让这件事情过渡得非常快,对 DVCS 和 Mercurial 感到非常兴奋,但我已经碰壁了。我读过很多人说这很简单,但要么我有一个奇怪的边缘案例,要么它不像谣言听起来那么容易。

我读过其他工具,例如 HGSubversion,我可以在其中将我的 SVN 克隆为 HG 存储库,但由于这些是单独的存储库,我宁愿只转换 SVN,确保一切正常,然后删除并卸载 SVN。我宁愿我的 HG 存储库不再“连接”到 SVN(HGSubversion 允许从克隆的 HG 存储库“推送”到父 SVN 存储库,对吧?)。其他工具的评价参差不齐,所以我希望转换扩展能够正常工作。

提前致谢 - 期待 Mercurial!

编辑:

记录适用于 Windows 的解决方案:

  1. 打开命令提示符
  2. 导航到您的 SVN 存储库(不是工作副本)
  3. 运行svnserve -r .\ -d
  4. 打开另一个命令提示符
  5. 导航到您想要您的 mercurial repo 的位置
  6. 可选:运行where hg ... 如果TortoiseHg 版本不是第一个,请编辑路径以使其成为第一个-此版本包括使用svn:// 协议所必需的SVN python 绑定。编辑路径后重新启动 cmd 提示符。
  7. 运行hg convert -s svn svn://localhost .\hg_repo_name

    • 我使用的是 computername.full.domain.name 而不是 localhost,但 localhost 也应该可以。
    • svn:// 斜线方向就像 http://file:/// 不像 C:\
    • 如果您的 SVN 存储库代码没有主干或者您没有使用主干文件夹(我的第一个存储库没有使用,因为我不知道自己在做什么),您需要这个,它告诉mercurial 使用根目录作为主干:

    hg --config config.svn.trunk= convert -s svn svn:\\localhost .\hg_repo_name

    • 我刚刚有一个 SVN 存储库,在其中我将一个代码文件夹导入到根目录中,但没有导入主干...我尝试使用上面的代码将主干设置为等于代码文件夹名称,但它不起作用...但是,当我将文件夹名称附加到 svn url 时,它起作用了:

    `hg 转换 svn://%computername%.domain.com/code_folder .\hg_repo_name

祝你好运!

【问题讨论】:

  • 另一种(可能更快,如果你有它的话)解决方案是使用 Linux 虚拟机来完成这项工作。

标签: svn mercurial tortoisesvn tortoisehg mercurial-convert


【解决方案1】:

正如Convert wiki 所述

先决条件:

Subversion 的 Python 绑定

而且似乎 Python 绑定尚未更新(至少),无法将 ra_local 与 1.8+ 存储库一起使用。

你有两个选择

  • 创建兼容 1.7 的 本地 SVN 存储库以供以后转换

OldRepo>svnadmin create --compatible-version "1.7" .

>svn log file:///Z:/OldRepo
------------------------------------------------------------------------
r1 | Badger | 2014-02-15 00:30:22 +0600 (Сб, 15 фев 2014) | 1 line

Create initial state
------------------------------------------------------------------------
>hg convert file:///Z:/OldRepo HG2-Repo
initializing destination HG2-Repo repository
scanning source...
sorting...
converting...
1 Create initial state
0 Create initial state

使用 HGSubversion 克隆 OldRepo 后的结果相同

>hg clone file:///Z:/OldRepo HG-Repo
[r1] Badger: Create initial state
pulled 2 revisions
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
  • 使用 any 服务器访问 1.8+ 版本库(svnserve 是最简单的方法)。我还没有尝试过 svn:// 存储库,但测试了 1.8 Subversion 的远程 http-served 存储库

只是样品

hg clone https://subversion.assembla.com/....
...
25 files updated, 0 files merged, 0 files removed, 0 files unresolved

【讨论】:

  • 感谢我使用 svnserve 来托管 repo,然后允许 hg convert 工作。我确实必须使用 svn:// 才能工作。非常感谢!
  • 刚刚花了一个多小时让它再次工作......原来我的愚蠢问题是我在工作副本而不是存储库中运行 svnserve(由于我糟糕的文件夹命名容易打错) - 如果其他人这样做,请不要犯我的错误!
  • 这个解决方案对我不起作用!如果其他人有同样的问题,只需尝试在类似 Ubuntu 的虚拟机上进行转换。我做到了,而且它一有机会就奏效了!我猜想 Windows 上的问题与 Subversion 的 Python 绑定有关。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多