Version control 当磁盘损坏/恢复将主repo恢复到旧状态时,如何处理Mercurial
我想知道是否有人能给我一些建议,告诉我如何处理我们的一个磁盘被损坏的后果,以及恢复到旧状态。故事是这样的: 我用Mercurial管理一些代码。磁盘a上有一个“主”存储库,并且 磁盘B上的分支/克隆。时间线如下所示Version control 当磁盘损坏/恢复将主repo恢复到旧状态时,如何处理Mercurial,version-control,mercurial,dvcs,restore,corruption,Version Control,Mercurial,Dvcs,Restore,Corruption,我想知道是否有人能给我一些建议,告诉我如何处理我们的一个磁盘被损坏的后果,以及恢复到旧状态。故事是这样的: 我用Mercurial管理一些代码。磁盘a上有一个“主”存储库,并且 磁盘B上的分支/克隆。时间线如下所示 从主存储库开始。有各种现存的分支/克隆可供选择 新特性的原型设计 克隆磁盘A上的主repo-->磁盘B上的另一个新分支 将更改提交到主回购,并推送到新分支 磁盘A已损坏 磁盘A在时间点1恢复为状态 磁盘B不受影响 我该怎么办 备选案文1: -自实际分支以来,分支上几乎没有发生什么变化
Zam我知道你说问题已经得到了回答,但还是让我给你提些建议吧。你问: 选项1:自实际分支以来,分支上几乎没有发生什么变化。因此,只需吹走主回购,并开始使用新的分支作为我的新主。如果我这样做,我会不会有问题合并我的旧克隆(在时间点0提到)回来 合并主存储库的旧克隆不会有任何问题。假设您拥有主repo
M
和克隆X
和Y
。假设它们包含如下更改(时间流向右侧):
因此,当只有[m1]
存在时,X
是M
的克隆,Y
是制作[m2]
后M
的克隆。无论是X
还是Y
都没有[m3]
-此变更集显然是通过在服务器上工作直接提交到M
存储库中的
现在,您发现带有M
的磁盘出现故障,并从备份中将其还原。备份只有[m1]
。现在的世界形势是这样的:
M: [m1]
X: [m1] --- [x1] --- [x2]
Y: [m1] --- [m2] --- [y1] --- [y2]
当您比较整体情况时,您将看到只缺少变更集[m3]
:它是不在任何克隆中的变更集(X
和Y
)
恢复后,您可以将[m2]
从Y
推到M
,以尽可能多地恢复数据。这是通过一个简单的方法完成的
$ hg push -r m2
其中m2
是有问题的修订号或变更集哈希
因此,我的建议是看一看整体情况:找到你的克隆,找出你仍然在它们之间分布的变更集以及缺少的变更集。将您需要的内容推回到主存储库,并设置一个具有更频繁备份的备份方案:-)
还请注意,您只丢失了
[m2]
,因为它只存在于一个克隆中。通常,您将在本地克隆中创建新的变更集,然后将它们推送到主存储库。这样,您将自动在主控中复制所有变更集!这使得丢失更改集变得更加困难,因为人们可以在恢复后将其工作推回。我将回答我自己的问题,以免大家浪费时间。原来我的新分支也在磁盘A上。所以这个问题是多余的。我丢失了一些工作,将不得不重做,但至少我所有的存储库都是一致的日期。干杯,请将您的答案作为真实答案添加到下面。您可以在两天后接受,然后您的问题将从“未回答的问题”选项卡中消失。
$ hg push -r m2