我想在项目 B 中重用项目 A 中的代码(两者都在单独的存储库中),因此我想将多个文件从原始项目存储库 A 移动到公共(public)存储库 C,该存储库将由项目B.(Maven等管理的依赖项)
我可以使用转换扩展和一些附加脚本(以发现所述文件的完整历史记录)仅提取我想要从 A 移动到它们自己的“过滤”存储库 F 中的文件。
在这个阶段我可以: a) 将 F 拉入 C, merge 并提交,或者 b) 将所有 F 更改导出为补丁,然后将其导入到 C 中 然而,这两种方法都会导致存储库 C 的变更集不按时间顺序排序。我看到 F 的历史放在 C 的历史之前。
是否可以“merge ”两个存储库,以便变更集按时间顺序排序?
我有脚本可以做到这一点 - 但到目前为止,每次我从 A 中移动不同的 F 集时,我都必须完全重建 C。(通过将所有 C 和 F 作为补丁导出,创建一个新的 C,然后导入所有补丁按时间顺序排列)。
谢谢!
最佳答案
不是真的。变更集的父级内置于其 nodeid(这是一个加密哈希)中,因此您无法在不完全更改/重建变更集的情况下重新排序变更集的实际父级。
您可以按照您想要的任何顺序将变更集引入存储库,前提是该变更集的父变更集位于它之前。
因此,如果 A 和 B 具有以下变更集,并具有以下修订号 (r=) 和创建时间 (t=):
A: null----[A r=0,t=0]----[C r=1,t=2]----[E r=2,t=4]
B: null----[B r=0,t=1]----[D r=1,t=3]----[F r=2,t=5]
您可以通过小心拉动创建一个像这样的存储库:
C: null----[A r=0,t=0]-------------------[C r=2,t=2]-------------------------[E r=4,t=4]
\
\-----------------[B r=1,t=1]--------------------[D r=3,t=3]------------------[F r=5,t=5]
但是这样做没有什么值(value),因为变更集的序列号(上面的 r)毫无意义)。
理想情况下,您的存储库 B 将是 A 的克隆,其所有本地修改仅存在于 B 中。这样,如果您修复 A 中的错误,您可以将其拉入 B 中,然后 merge 以修复该问题。移植/转换是一种空洞的替代品。另一种选择是将 A 和 B 的公共(public)部分提取到存储库 C 中,然后 A 和 B 都将其用作 Mercurial 子存储库。
关于mercurial - Mercurial 存储库中的变更集可以按时间顺序 merge 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4162722/