Mercurial:"未找到匹配"执行合并时,"没有节点!"如果我试图去除

时间:2016-03-22 09:56:17

标签: merge mercurial

我有一个托管在Dropbox文件夹中的mercurial dropbox,我从另一个仓库推送,我保存在我的办公室PC中。通过这种方式,我可以从办公室处理我的项目,并在家中执行修补程序。

同步时发生了一些不好的事情,因此文件没有在某处正确地同步。我有一个修订版(编号678),我无法与实际头部合并。

enter image description here

如果我尝试合并,我会收到此消息

  

中止:   data/hotelsclick/src/main/res/values/string-array.xml.i@5f2b6faa86a1:   没找到匹配!

如果我尝试用 hg strip 678删除无用的修订

  

中止:   data/hotelsclick/src/main/res/values/string-array.xml.i@5f2b6faa86a1:   没有节点!

如果我执行 hg验证,这就是结果

checking files  [...]/src/main/res/values/string-array.xml@678: 5f2b6faa86a1 in manifests not found 
     

libs/date-interval-picker/.git/index@678:a83e1b77d446在清单中   未找到8009个文件,681个更改集,14161个修订版2   遇到完整性错误! (第一个损坏的变更集似乎是   678)

如果我试图推动怎么办?

  

搜索更改   abort:push创建新的远程头16c4912af9a5!   (合并或查看" hg help push"有关推新头的详细信息)

所以我无法合并,无法删除该修订版,无法推送。我很困难,我不知道为什么。有人可以帮忙吗?我不关心修订版678的内容,如果可以,我可以快乐地删除它。

谢谢

1 个答案:

答案 0 :(得分:4)

首先,我强烈建议不要使用文件同步服务(无论是Dropbox还是Google Drive或其他)与版本控制系统一起使用。这些服务不尊重存储库操作的原子性;甚至包含单个文件存储库(例如Fossil)的版本控制系统也不是100%安全的,即使只有一个用户正在使用该服务。

其次,您需要修复部分损坏的存储库。在理想情况下,您可以在某处获得干净的备份,即使它不是最新的,也可以选择性地重播缺失的修订版(例如,使用hg exporthg import)。< / p>

除此之外,下一步是看看你是否可以进行部分克隆。例如,您可以尝试:

hg clone -r 680 /path/to/repo /path/to/clean_repo

如果只有数据有缺陷,通常应跳过修订版678。但是,增量压缩的工作方式,在678之后按顺序发生的修订也可能已损坏。在这种情况下,我会使用-r 677代替-r 680进行尝试,看看hg export是否适用于复制修订679680

如果这不起作用并且腐败更深入,我会尝试转换扩展名:

hg --config extensions.convert= convert --config convert.hg.ignoreerrors=True /path/to/repo /path/to/clean_repo

请注意,此类转换可能会更改各个存储库条目的哈希值,这意味着您必须在所有位置更新存储库内容。

相关问题