我有一个SVN存储库,其中包含许多松散相关的子文件夹 我想将其转换为HG存储库,将每个子文件夹转换为单独的HG子目录 同时,我想访问顶级仓库中所有子目录的组合更改日志。
所以我创建了一个空的HG仓库,一些空的子仓库,用.hgsub链接他们的名字和位置,检查我可以将它的子仓库克隆到另一个仓库...
然后我尝试将部分SVN克隆设置为子目录(为每个子目录指定带有... / trunk /子文件夹的SVN URL)。但由于我不知道的原因,他们没有出现在顶级HG历史中。
我从头开始,并尝试将SVN中继网址放入顶级.hg / hgrc并执行'hg pull'。但是它将整个SVN回购提升到了最高水平,而且subrepos被留空了。
现在我会问你接下来要做什么? 可能是因为我是HG的新手,所以我遗漏了一些东西。 我很感激您的任何建议。
答案 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是否有效。