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
在Mercurial中,如何组合不相关的存储库,只留下一个根?_Mercurial_Rebase - Fatal编程技术网

在Mercurial中,如何组合不相关的存储库,只留下一个根?

在Mercurial中,如何组合不相关的存储库,只留下一个根?,mercurial,rebase,Mercurial,Rebase,我有一个项目的4个版本。版本1-3是最初不受源代码控制的“原型”(它们在文件系统中作为单独的目录存在)。版本4从一开始就受源代码控制,现在有很长的提交历史 我想结合这些,使版本1-3成为单独的变更集,其中每个变更集都是前一个版本的后代。版本4的根应该成为版本3的后代(当然,版本4的历史不会崩溃) 所有的更改都是私有的,而不是公开的(重写历史并没有问题) 到目前为止我所做和尝试的: 1.我在原型版本目录中设置了新的hg存储库 2.我克隆了版本4的存储库 3.我(使用hgpull--force)将版

我有一个项目的4个版本。版本1-3是最初不受源代码控制的“原型”(它们在文件系统中作为单独的目录存在)。版本4从一开始就受源代码控制,现在有很长的提交历史

我想结合这些,使版本1-3成为单独的变更集,其中每个变更集都是前一个版本的后代。版本4的根应该成为版本3的后代(当然,版本4的历史不会崩溃)

所有的更改都是私有的,而不是公开的(重写历史并没有问题)

到目前为止我所做和尝试的:
1.我在原型版本目录中设置了新的hg存储库
2.我克隆了版本4的存储库
3.我(使用
hgpull--force
)将版本1-3的无关存储库拉入克隆存储库

这在单个存储库中为我提供了4个不相关的“根”(没有祖先的变更集)。当我把它们组合在一起时,我不想记住这4个根
hg-rebase
应该允许我移动变更集并销毁原始变更集,这与
hg-merge
不同

在这里,我将使用
101
作为“版本1”(这是一个没有父项的单一变更集)的修订版,使用
102
作为“版本2”的修订版

尝试1:我尝试
hg-rebase-b102-d101
,但得到的响应
没有任何内容要重新设置
。这大概是因为他们没有共同的祖先(我觉得这是不一致的…
-b102
将包括除共同祖先以外的所有祖先,在这种情况下,这将不算什么。)

尝试2:我尝试
hg-rebase-s102-d101
。这会导致合并冲突。我使用
hg revert--all--rev 102
hg resolve-m
来表示我在所有冲突中都更喜欢“版本2”(尽管我想知道在存在添加/删除时,这是否真的是一种正确的方式来偏好一个父级而不是另一个父级?)。但当我提交时,我没有线性历史记录——修订版
102
仍然存在

如果我使用
hg-rebase--continue
作为最后一个命令(而不是
hg-commit
),那么它工作得很好

我没有阅读文档的最后一部分:

据我所知,在重定基址时最好使用
--tool“internal:other”
,而不是恢复到修订版。

重定基址的另一种方法对我有效,就是使用
hg convert
扩展名和
--sitemap
选项

尽管
convert
旨在实际从其他源代码管理系统(如SVN)迁移,但它也可以从hg“转换”到hg

“--spitchemap”选项允许您显式设置变更集之间的子/父关系。我用它来消除来自无关存储库的分支。Mercurial似乎能够很好地处理这一问题,例如,在转换/拼接映射操作之后,具有相同名称的文件似乎具有连续的历史记录

我不确定这是否一定是一个比重设基础“更好”的解决方案。对于奇数情况,这可能更像是一种小生境方法(?)。一个明显的缺点是,对于大型存储库,转换过程可能需要相当长的时间才能运行


.

如果在执行合并、重设基础或移植时存在合并冲突,则应在将其标记为已解决之前手动解决这些冲突。在我的例子中,
hg revert--all--rev 102
是我想要“手动”解决冲突的方式@Ein,“文档的最后一部分”的具体部分是什么,是解决这一问题的关键?感谢可能的副本