mercurial - 将 Mercurial 捆绑文件应用于不同的变更集

标签 mercurial hgsubversion

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/

相关文章:

mercurial - TortoiseHg Workbench 图形符号的含义

version-control - 仅从另一个分支 merge 一个变更集

mercurial - 在不使用 --svn 的情况下修复 HgSubversion Repo

mercurial - Mercurial hgsubversion 扩展使 SVN Externals 表现得像 Hg 子存储库

version-control - 如何在运行 'update'之前查看存储库中的文件

version-control - Emacs 的最佳 Mercurial 模式?

mercurial - 是否可以使用 hgsubversion 分步克隆?

svn - 如何使用 hgsubversion 在 Subversion 存储库中创建新标签?

git - DVCS 如何在大型团队中使用?