2012-04-24 88 views
1

我有一個位於bitbucket中的mercurial repository my_project。今天我做了一些改變,並將它們提交到我的本地存儲庫,但還沒有推出。mercurial:在提交之後從提交之後恢復已刪除的存儲庫,然後再推送

然後,我主要塞滿和fatfingered rm -rf my_project(!!!!!)。

有沒有什麼方法可以檢索我今天所做的更改,因爲我還沒有推出它們呢?我知道一天的提交併不像聽起來那麼多,但它是!

我對這個項目的所有其他克隆只是最新推送到最近的推送(其中不包括今天的更改)。

歡呼聲。

+1

我猜它歸結爲文件系統級恢復刪除的文件。這取決於操作系統和文件系統。也許在superuser.com上詢問這個問題? – Thilo 2012-04-24 03:20:38

+1

順便說一句,第二個實現總是比第一個更清潔,更好:-) – zerkms 2012-04-24 03:24:00

+0

Bw?我從來沒有見過 – 2012-04-24 03:27:24

回答

3

mercurial不能拯救你。來自mercurial的數據存儲在項目文件夾底部的隱藏目錄中。在你的情況下,可能在my_project/.hg。你的遞歸刪除也會拋棄這個文件夾。

那麼也許是file recovery tool

+0

好的,謝謝你。事實證明,當我測試它時,我安裝了今天的代碼版本,由於它是R代碼,我很幸運能夠檢索每個函數的代碼(沒有任何我放入的評論,但是比沒什麼!) – 2012-04-24 03:28:32

1

否。只有在您推送完畢後,更改纔會存儲在本地資源庫目錄(其中的.hg目錄)中。他們從來沒有放在其他地方(甚至不是/ tmp)。

雖然有可能您可以從磁盤中恢復已刪除的文件;搜索周圍的指令和工具來做到這一點。

+0

好的,謝謝你。事實證明,當我測試它時,我安裝了今天的代碼版本,由於它是R代碼,我很幸運能夠檢索每個函數的代碼(沒有任何我放入的評論,但是比沒有!) – 2012-04-24 03:28:42

1

恐怕提交與工作副本一起被刪除,文件恢復工具是您唯一的選擇來恢復丟失的.hg文件夾。我看到你可以從安裝中恢復代碼 - 太棒了!

如果你害怕的這個事件再次發生,那麼你可以安裝一個粗鉤狀

[hooks] 
post-commit = R=~/backup-repos/$(basename "$PWD"); 
       (hg init "$R"; hg push -f "$R") > /dev/null 2>&1 || true 

這將強行推動所有提交的副本到合適的回購~/backup-repos下。 -f標誌可確保即使您使用rebase或mq等修飾歷史記錄的擴展名也可以推送備份。它還將允許將無關回購的變更集推入相同的備份回購庫 - 想象一下名爲foo的兩個不同回購站。因此,一段時間後,備份存儲庫最終會出現一大堆變更集,您可能需要稍後刪除它們。

我測試了這短暫的日常工作,我不認爲你會發現的額外副本的開銷,你會感謝自己以後:-)