我有一个托管在Dropbox文件夹中的mercurial dropbox,我从另一个仓库推送,我保存在我的办公室PC中。通过这种方式,我可以从办公室处理我的项目,并在家中执行修补程序。
同步时发生了一些不好的事情,因此文件没有在某处正确地同步。我有一个修订版(编号678),我无法与实际头部合并。
如果我尝试合并,我会收到此消息
中止: 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的内容,如果可以,我可以快乐地删除它。
谢谢
答案 0 :(得分:4)
首先,我强烈建议不要使用文件同步服务(无论是Dropbox还是Google Drive或其他)与版本控制系统一起使用。这些服务不尊重存储库操作的原子性;甚至包含单个文件存储库(例如Fossil)的版本控制系统也不是100%安全的,即使只有一个用户正在使用该服务。
其次,您需要修复部分损坏的存储库。在理想情况下,您可以在某处获得干净的备份,即使它不是最新的,也可以选择性地重播缺失的修订版(例如,使用hg export
和hg import
)。< / p>
除此之外,下一步是看看你是否可以进行部分克隆。例如,您可以尝试:
hg clone -r 680 /path/to/repo /path/to/clean_repo
如果只有数据有缺陷,通常应跳过修订版678。但是,增量压缩的工作方式,在678之后按顺序发生的修订也可能已损坏。在这种情况下,我会使用-r 677
代替-r 680
进行尝试,看看hg export
是否适用于复制修订679
和680
。
如果这不起作用并且腐败更深入,我会尝试转换扩展名:
hg --config extensions.convert= convert --config convert.hg.ignoreerrors=True /path/to/repo /path/to/clean_repo
请注意,此类转换可能会更改各个存储库条目的哈希值,这意味着您必须在所有位置更新存储库内容。