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
似乎不喜欢没有父母在回购中的捆绑包。
答案 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版