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



TLDR:我有一个父版本X的HG包,但是版本X不存在于我的repo中。但是,我确定版本Y的文件与版本x相同。我如何应用这个包?

背景:

我使用hgsubversion与SVN的repo交互。

有一些更改我不想提交。hgsubversion不支持偏压

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

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

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

具有讽刺意味的是,hgsubversion本身使用strip,因此有一个备份文件,我可以使用它来剥离新版本,添加剥离的旧版本,然后应用我的版本包,导出补丁,剥离这两个版本,并恢复SVN版本。但这听起来……极度痛苦和愚蠢。没有更好的办法了吗?

(hg transplant似乎也不喜欢在repo中没有父组件的bundle)

如果没有bundle的父更改集,那么使用它实际上是不可能的。包由紧凑的二进制增量组成,这些增量只能应用于精确的二进制源。没有可用的"上下文"可以让Mercurial像patch那样猜测如何将它们应用到其他版本。在核心Mercurial中,这从来都不是问题,因为更改集从来没有被删除,但是像hgsubversion和mq这样的扩展打破了这个规则。

(如果您可以从.hg/strip-backup中的备份包中恢复剥离的更改集,那么您可以重新设置更改并再次剥离。)

Background:在遇到hgsubversion只成功推送一个版本的问题后,我在提交中变得懒惰(如果您更新到您想要推送的最新版本,则可以部分提交),并最终开始提交所有内容。所以我取消了推送,它第一次没能保留我后来的修订。

我尝试恢复,但无法找到父提交。对我有用的是恢复...-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)

顺便说一句,我正在运行Mercurial 2.0版本

相关内容

  • 没有找到相关文章

最新更新