Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将SVN迁移到HG,将其拆分为子协议(但保留组合日志)_Svn_Mercurial_Mercurial Subrepos - Fatal编程技术网

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

将SVN迁移到HG,将其拆分为子协议(但保留组合日志),svn,mercurial,mercurial-subrepos,Svn,Mercurial,Mercurial Subrepos,我有一个SVN存储库,它的主干中包含许多松散相关的子文件夹。 我想将其转换为HG存储库,将这些子文件夹中的每一个子文件夹转换为一个单独的HG subrepo。 同时,我想访问顶级回购中所有子回购的合并变更日志 所以我创建了一个空的HG回购协议,一些空的子回购协议,通过.hgsub链接它们的名称和位置,检查我是否可以将这个回购协议和它的子回购协议克隆到另一个公司 然后我尝试将部分SVN克隆到子repo(为每个子repo指定带有…/trunk/subfolder的SVN URL)。但它们并没有出现在

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

所以我创建了一个空的HG回购协议,一些空的子回购协议,通过.hgsub链接它们的名称和位置,检查我是否可以将这个回购协议和它的子回购协议克隆到另一个公司

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

我从头开始,尝试将SVN主干URL放入top-level.hg/hgrc并执行“hg pull”。但它把整个SVN回购协议拉到了顶层,而次级回购协议却空空如也

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

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

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

局部修改 可以从父repo中看到对子repo的本地修改,但对于每个命令不一定采用相同的方式。例如,如果我有一个类似这样的存储库(其中
sub
是subrepo):

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

> hg status
M    foo.c
但是如果我添加subrepo参数
-S
,我会看到:

> hg status -S
M    foo.c
M    sub/bar.c
如果我使用的是OrtoiseHG v2.X.X,它会将foo.c标记为已修改,并将
sub
标记为已修改,但我必须双击subrepo以查看实际的文件修改

转换说明:

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


我过去成功地做了一件事,就是在现有存储库的基础上覆盖一个Hg存储库。但是,我不确定这是否适用于SVN和Hg。

您是否一次性执行SVN->Hg转换?或者你想在两者之间来回移动?我们需要在初始阶段进行双向复制。然后冻结SVN回购协议,只修改HG 1。那么,你是说没有可能,例如在tortoiseHG中,右键单击顶级回购协议并查看所有子回购协议的所有更改?谢谢。目前我使用的是基于SVN回购(gsubversion扩展)的OrtoisehG。现在我们正在尝试迁移到HG。我们正在犹豫是否应该将2GB HG回购拆分为7个子回购。所以,这就是所有问题产生的原因。@Vasily是的,这是一个重要的决定。如果你打算尝试重复使用2GB回购协议的一部分,我会推荐它们。我还建议使用2.X.X版本的Ortoisehg,它似乎有更好的subrepo支持。祝你好运你是对的。乌龟处理subrepos相当温和。用户界面设计尽可能友好。但是HG subrepos仍然不支持一些非常重要的(对我来说)一键操作——mq strip命令。因此,子回购协议仍然不是非常有用的HG功能。太遗憾了,我们不得不放弃子repo。@您是对的,mq从父项触发变更集不会删除子repo中引用的变更集。如果你想一想,当一个子回购在不同的项目上使用时,仅仅因为一个消费项目不想再使用它,就去掉一个子回购变更集是没有意义的。如果这是你认为你需要的东西,你可能会考虑把你的次级回购和回购合并成一个回购。
> hg status -S
M    foo.c
M    sub/bar.c