TLDR:我有一个包含父级 X 的 HG bundle ,但我的存储库中不存在修订版 X。但是,我确定修订版 Y 的文件与修订版 X 相同。如何应用该 bundle ?
背景:
我使用 hgsubversion
与 SVN 存储库交互。
有一些我不想提交的更改。 hgsubversion
不支持部分推送。
我曾经通过手动创建临时导出/补丁文件或手动恢复 .orig 文件(hg revert
的结果)来解决此问题。
在这种情况下,我提交了我不想推送的更改,然后使用hg strip
,然后推送,然后尝试使用hg unbundle .hg/strip-backup/file
.
问题:hgsubversion
在提交后将原始变更集替换为从 SVN 导入的新变更集。结果:变更集 ID 发生变化。这是一个问题,因为现在 hg unbundle
不再起作用,因为它依赖于那里的父变更集(但它已被剥离)。
具有讽刺意味的是,hgsubversion
本身使用strip
,因此有一个备份文件,我可以用它来剥离新版本,添加剥离的旧版本,然后使用我的 bundle 应用修订版,导出补丁,剥离两者,然后恢复 SVN 修订版。但这听起来……极其痛苦和愚蠢。我能做的还有什么更好的事情吗?
(hg移植
似乎也不喜欢在存储库中没有父级的 bundle )
最佳答案
如果没有 bundle 的精确父变更集,实际上不可能使用 bundle 。 bundle 由紧凑的二进制增量组成,只能应用于精确的二进制源。没有可用的“上下文”可以让 Mercurial 猜测如何像补丁一样将它们应用到其他修订版。在 Mercurial 核心中,这从来都不是问题,因为变更集永远不会被删除,但像 hgsubversion 和 mq 这样的扩展却打破了规则。
(如果您可以从 .hg/strip-backup 中的备份包中恢复剥离的变更集,则可以重新调整您的更改并再次剥离。)
关于mercurial - 将 Mercurial 捆绑文件应用于不同的变更集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7581773/