3

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如果没有在 repo 中包含父级,似乎也不喜欢捆绑包)

4

2 回答 2

3

如果没有捆绑包的精确父变更集,实际上是不可能使用捆绑包的。捆绑包由紧凑的二进制增量组成,只能应用于精确的二进制源。没有可用的“上下文”可以让 Mercurial 猜测如何将它们应用到其他版本,就像补丁一样。在核心 Mercurial 中,这从来不是问题,因为变更集永远不会被删除,但是像 hgsubversion 和 mq 这样的扩展会破坏规则。

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

于 2011-10-02T22:26:46.507 回答
0

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

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

于 2011-12-29T17:54:41.373 回答