有时,当我进行代码更改时,我需要对我的存储库中的共享库代码进行相应的更改,该存储库本身就是一个子存储库。当我想提交更改时,我会在父存储库中提交,Mercurial 会负责在子存储库中进行相应的提交。
但是,我最近开始使用 MQ 来更好地跟踪我自己的更改历史,并给自己更多的自由来进行实验和更安全地进行大规模重构工作。我在父存储库和子存储库上都启用了 MQ。
在上述场景中,我是否正确假设如果我“提交”到新的或现有的 MQ 补丁,那么子存储库会被忽略?这似乎是我的测试中发生的事情。这是否意味着我需要手动管理子存储库中的补丁队列?这很快就会变得笨拙。
如果这不起作用,那很好——当我有跨仓库工作要做时,我可以调整我的工作流程并避免使用 MQ——但我想知道我是否遗漏了一些东西,或者其他人是否有他们可以分享的这种情况的解决方案。
更新:根据此线程,此时似乎“不支持”:https ://www.mercurial-scm.org/bts/issue2499
我尝试了以下方法:
- 手动提交子存储库更改。
- 使用来自子存储库提交的哈希手动更新了父存储库中的 .hgsubstate 文件。
- 试图 qrefresh 父存储库。
这个想法是我可以从父存储库获取提交以始终与正确的子存储库版本同步,即使我必须手动执行。不幸的是,Mercurial 似乎想在这里保护我(应该如此!),当我尝试 qrefresh 时,会出现以下问题:
warning: not refreshing .hgsubstate
为了“修复”事情,我在父存储库上的 hgfinish 之后做了一个空提交,以使事情同步备份。但是......这似乎很愚蠢,并且使代码历史更难理解。
哦,好吧,当涉及到子存储库时,我想我会回到石器时代并停止在我的工作流程中使用 MQ。