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

flu*_*ak7 5 svn tortoisesvn mercurial tortoisehg mercurial-convert

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

我试图转换使用TortoiseSVN 1.8创建的本地Subversion存储库.4,Subversion 1.8.5

可以肯定,我的老Subversion版本库没有我创建了一个新的SVN回购称为test_repo用默认的文件夹结构的任何奇怪的怪癖,进行结帐到test_repowc,然后添加一些文本文件到躯干,然后修改并提交文件几次提供一些历史.

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

hg convert test_repo
Run Code Online (Sandbox Code Playgroud)

并得到以下:

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
Run Code Online (Sandbox Code Playgroud)

如您所见,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文件夹(我没有我的第一个回购协议,因为我不知道我在做什么),你需要这个,它告诉善变的使用根目录作为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

祝好运!

Laz*_*ger 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
Run Code Online (Sandbox Code Playgroud)

使用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
Run Code Online (Sandbox Code Playgroud)
  • 使用任何服务器访问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
Run Code Online (Sandbox Code Playgroud)