在SVN上的HG转换给出“看起来不像Subversion存储库”

时间:2014-02-14 16:45:54

标签: svn mercurial tortoisesvn tortoisehg

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

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

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

然后我打开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回购代码没有中继或者您没有使用trunk文件夹(我没有为我的第一个回购,因为我不知道我在做什么),你需要这个,告诉mercurial使用根目录作为trunk:

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

    • 我刚刚有一个SVN repo,我将一个代码文件夹导入根目录,但没有进入trunk ...我尝试使用上面的代码将trunk设置为等于代码文件夹名称但是它不起作用...但是,当我将文件夹名称附加到svn url时,它可以工作:

    `hg convert svn://%computername%.domain.com/code_folder。\ hg_repo_name

  8. 祝你好运!

1 个答案:

答案 0 :(得分:6)

作为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
  • 使用任何服务器访问1.8+存储库(svnserve是最简单的方法)。我没有尝试过svn:// repository,但是测试了1.8 Subversion的远程http服务存储库

只是示例

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