Version control 当磁盘损坏/恢复将主repo恢复到旧状态时,如何处理Mercurial

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: -自实际分支以来,分支上几乎没有发生什么变化

我想知道是否有人能给我一些建议,告诉我如何处理我们的一个磁盘被损坏的后果,以及恢复到旧状态。故事是这样的:

我用Mercurial管理一些代码。磁盘a上有一个“主”存储库,并且 磁盘B上的分支/克隆。时间线如下所示

  • 从主存储库开始。有各种现存的分支/克隆可供选择 新特性的原型设计
  • 克隆磁盘A上的主repo-->磁盘B上的另一个新分支
  • 将更改提交到主回购,并推送到新分支
  • 磁盘A已损坏
  • 磁盘A在时间点1恢复为状态
  • 磁盘B不受影响
  • 我该怎么办

    备选案文1: -自实际分支以来,分支上几乎没有发生什么变化。那就吹走吧 主回购,并开始使用新分支作为我的新主回购。如果我这样做,你不会吗 我无法将我的旧克隆(在时间点0提到)合并回

    备选案文2: -只需在我的主程序中手动更改已丢失的内容,然后与新分支进行差异。即使我这样做了,我将如何继续推进新的分支机构

    备选案文3: -只需在我的主程序中手动更改已丢失的内容,然后与新分支进行差异。然后删除新分支,并克隆一个新分支

    欢迎有任何建议 干杯
    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