在不同的变更集上应用mercurial bundle文件

时间:2011-09-28 10:26:28

标签: mercurial hgsubversion

TLDR :我有一个带有父X的HG捆绑包,但我的仓库中不存在修订版X.但是,我肯定,修订版Y的文件与修订版X相同。如何应用捆绑包?

背景

我使用hgsubversion与SVN回购交互。

我不想提出一些改变。 hgsubversion不支持部分推送。

我曾经通过手动创建临时导出/补丁文件或手动恢复.orig文件(hg revert的结果)来解决方法。

在这种情况下,我提交了我不想推送的更改,然后使用hg strip,然后推送,然后尝试使用hg unbundle .hg/strip-backup/file

问题hgsubversion将原始变更集替换为它在提交后从SVN导入的新变更集。结果:变更集ID更改。这是一个问题,因为现在hg unbundle不再有效,因为它依赖于父变量集(但它已被剥离)。

具有讽刺意味的是,hgsubversion本身使用strip因此有一个备份文件我可以用来剥离新版本,添加剥离的旧版本,然后应用我的修订包,导出补丁,剥离两者,并恢复SVN修订版。但这听起来......非常痛苦和愚蠢。我能做的更好吗?

hg transplant似乎不喜欢没有父母在回购中的捆绑包。

2 个答案:

答案 0 :(得分:3)

如果没有捆绑包的精确父更改集,实际上不可能使用捆绑包。 Bundles由紧凑的二进制增量组成,只能应用于精确的二进制源。没有'上下文'可以让Mercurial猜测如何将它们应用于其他修订版本。在核心的Mercurial中,这绝不是一个问题,因为永远不会删除变更集,但像hgsubversion和mq这样的扩展会违反规则。

(如果您可以在.hg / strip-backup中从备份捆绑中恢复已剥离的变更集,则可以重新设置更改并再次剥离。)

答案 1 :(得分:0)

后台:点击an issue with hgsubversion pushing only 1 revision successfully后,我在提交中变得懒惰(如果您更新到要推送的最新修订版,则可以进行部分提交),最后开始提交一切。所以我杀了推,并且第一次没能保留我以后的修改。

我尝试恢复,但无法找到父提交。对我有用的是恢复...-backup.hg文件(条带备份中还有一个...-temp.hg文件。)

奇怪的是(这就是为什么我回答这个问题)是它只给了我一个关于父母不在那里的警告(我不明白为什么)......

warning: ignoring unknown working parent d5663567bc4b!
adding changesets
adding manifests
adding file changes
added 21 changesets with 1255 changes to 941 files
(run 'hg update' to get a working copy)

BTW,我正在运行Mercurial 2.0版