2012-02-16 166 views
3

我想知道是否有人可以給我建議如何應對我們的一個磁盤被損壞的後果,並恢復到一個古老的州。這裏的故事:如何處理磁盤損壞/恢復磁盤損壞/恢復已將主回購恢復到舊狀態

我有一些我用Mercurial管理的代碼。在磁盤A上有一個「主」存儲庫,並在磁盤B上有一個分支/克隆。時間線看起來像這樣

  1. 從主存儲庫開始。 有各種現有的分支機構/克隆原型的新功能。在磁盤上的甲
  2. 克隆主回購 - >在磁盤乙另一個新的分支
  3. 提交修改掌握回購,並推到新的分支
  4. 盤A被損壞
  5. 盤A被恢復在時間點到狀態1.
  6. 磁盤B不受影響

我該怎麼辦?

選項1: - 實際分支以來發生的分支很少。所以只需吹走 主回購,並開始使用新的分支作爲我的新主人。如果我這樣做,不會 我有問題合併我的舊克隆(在時間點0提到)回來?

選項2: - 只需在我的主人手動進行更改,我已經失去了與新分支的差異。即使我這樣做,我將如何繼續推動新的分支?

選項3: - 只需手動進行我的主人已經失去了我的差異與新的分支的變化。然後刪除新分支,並克隆一個新分支。

任何意見,歡迎 歡呼 贊

+0

我要回答我自己的問題,並節省你所有的時間浪費你的時間。 原來我的新分支也在磁盤A上。所以這個問題是多餘的。 我失去了一些工作,將不得不重做它,但至少我的所有庫是 一致的日期。 歡呼聲 Zam – user1213546 2012-02-16 11:11:19

+0

請在下面添加您的答案作爲真實答案。您可以在兩天後接受它,然後您的問題將從未回答的問題標籤中消失。 – 2012-02-19 12:54:10

回答

3

我知道你說的問題的答案,但讓我無論如何提供一些建議。你問:

選項1:自實際分支以來很少發生分支。所以,只要吹走大師回購,並開始使用新的分支作爲我的新主人。如果我這樣做,難道我的舊克隆(在時間點0提到)合併回來了嗎?

您在合併主存儲庫的舊克隆時沒有任何問題。想象一下你有主回購M和克隆XY。比方說,它們含有這樣的變化(時間流到右):

M: [m1] --- [m2] --- [m3] 

X: [m1] --- [x1] --- [x2] 

Y: [m1] --- [m2] --- [y1] --- [y2] 

所以X是的M克隆時只[m1]存在,YM克隆[m2]作出後。 XY都沒有[m3] - 此更改集明顯通過在服務器上工作直接進入M存儲庫。

您現在發現M的磁盤出現故障,您將其從備份中恢復。備份只有[m1]。世界現在的情況是這樣的:

M: [m1] 

X: [m1] --- [x1] --- [x2] 

Y: [m1] --- [m2] --- [y1] --- [y2] 

當你比較,你會發現只有變更集[m3]缺少總體情況:它是一個沒有任何克隆(XY)的。

恢復之後,您可以將[m2]Y改爲M以挽救儘可能多的數據。這是一個簡單的

$ hg push -r m2 

其中m2是版本號或有關變更哈希完成。

所以我的建議是看看整體情況:找到你的克隆並找出你仍然分佈在哪些變更集以及哪些缺失。按您需要返回到主存儲庫和設置備份方案有更頻繁的備份什麼:-)

還請注意,你只失去了[m2],因爲它只在克隆存在。通常,您將在本地克隆中創建新的更改集,然後將它們推送到主存儲庫。這樣,您將自動擁有主設備中所有變更集的副本!這使得更改設置變得更加困難,因爲人們可以在恢復後將工作推回原處。

+0

這非常有用 - 謝謝! – user1213546 2012-02-23 13:25:48