将SVN迁移到HG,将其拆分为subrepos(但保留组合日志)

时间:2011-04-22 16:20:22

标签: svn mercurial mercurial-subrepos

我有一个SVN存储库,其中包含许多松散相关的子文件夹 我想将其转换为HG存储库,将每个子文件夹转换为单独的HG子目录 同时,我想访问顶级仓库中所有子目录的组合更改日志。

所以我创建了一个空的HG仓库,一些空的子仓库,用.hgsub链接他们的名字和位置,检查我可以将它的子仓库克隆到另一个仓库...

然后我尝试将部分SVN克隆设置为子目录(为每个子目录指定带有... / trunk /子文件夹的SVN URL)。但由于我不知道的原因,他们没有出现在顶级HG历史中。

我从头开始,并尝试将SVN中继网址放入顶级.hg / hgrc并执行'hg pull'。但是它将整个SVN回购提升到了最高水平,而且subrepos被留空了。

现在我会问你接下来要做什么? 可能是因为我是HG的新手,所以我遗漏了一些东西。 我很感激您的任何建议。

1 个答案:

答案 0 :(得分:2)

报告修订历史记录和个别文件状态在涉及Hg子目录时会有点复杂。

修订历史

子存储库的修订历史记录在父存储库中不可见。当你考虑它时,这是有道理的,因为每个subrepo实际上是一个不同的存储库 - 实际上没有好的方法来覆盖两个单独的历史记录,这些信息也不是非常有用。从命令行,您必须导航到每个子目录目录并执行hg log以查看历史记录。从TortoiseHg 2.X.X,在提交视图中,您可以双击标有S的任何内容,以在TortoiseHg GUI中打开该子参数。

本地修改

可以从父回购中看到对子回版的本地修改,但对于每个命令不一定以相同的方式。例如,如果我有一个看起来像这样的存储库(其中sub是subrepo):

/project
  |
  ----> foo.c
  |
  ----> sub/
         |
         ----> bar.c
         |
         ----> more.c

如果我修改了bar.c和foo.c,然后从命令行执行hg status,我会看到以下内容:

> hg status
M    foo.c

但如果我添加subrepo参数-S,我会看到:

> hg status -S
M    foo.c
M    sub/bar.c

如果我使用的是TortoiseHg v2.XX,它会将foo.c标记为已修改,它会将sub标记为已修改,但我必须双击该子版本才能查看实际的文件修改。

转化说明:

在执行转化方面 - 请查看convert repository扩展程序。如果您正在执行一次转换然后放弃SVN存储库,那么这可能就是您所需要的。如果您打算在SVN和HG之间来回尝试,您可能会遇到更多问题。

我过去成功完成的事情是将Hg存储库覆盖在现有存储库之上。不过,我不确定这对SVN和Hg是否有效。