1

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

所以我创建了一个空的 HG 存储库,一些空的子存储库,通过 .hgsub 链接它们的名称和位置,检查我是否可以将这个存储库与它的子存储库一起克隆到另一个组件...

然后我尝试将部分 SVN 克隆到子仓库(为每个子仓库指定带有 .../trunk/subfolder 的 SVN URL)。但是由于我不知道的原因,它们没有出现在顶级 HG 历史中。

我从头开始,并尝试将 SVN 中继 URL 放入顶级 .hg/hgrc 并执行“hg pull”。但是它将整个 SVN 存储库拉到顶层,并且子存储库是空的。

现在我会问你下一步该怎么做?
可能我错过了一些东西,因为我是 HG 的新手。我将不胜感激您的任何建议。

4

1 回答 1

2

当涉及到 Hg subrepos 时,报告修订历史和单个文件状态会变得有点复杂。

修订记录

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

局部修改

可以从父 repo 中看到对 subrepos 的本地修改,但每个命令的方式不一定相同。例如,如果我有一个看起来像这样的存储库(子存储库在哪里sub):

/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为已修改,但我必须双击子存储库才能查看实际的文件修改。

转换说明:

就执行转换本身而言 - 查看转换存储库扩展。如果您正在执行一次性转换,然后放弃 SVN 存储库,这可能就是您所需要的。如果您要尝试在 SVN 和 HG 之间来回工作,您可能会遇到更多问题。

Something I've done successfully in the past is overlay a Hg repository on top of an existing repository. I'm not sure if this would work well for SVN and Hg, however.

于 2011-04-22T17:34:24.347 回答