2010-09-24 82 views
2

我在最近的4-5版本中打破了一些代碼/推送到主存儲庫。現在我想完全刪除這個推送,並從這一點開始我的倉庫的HEAD。我怎樣才能做到這一點?在SVN中有dump命令,它將整個存儲庫從一個修訂版複製到另一個修訂版。在Mercurial或其他方面有一些替代品?如何切斷某些修訂/推送的mercurial存儲庫

+0

看起來像一個副本http://stackoverflow.com/questions/3765208/undo-an-hg-push-backout – 2010-09-24 14:37:02

回答

2

Quardas「完全刪除」不是mercurial的默認詞彙表的一部分。這是一個圍繞不變歷史建立的系統。你可以扭轉你後悔的事情,但你不要刪除它。想想一個科學家在他/她的實驗室中用筆在日誌中編號頁面上書寫 - 撕掉頁面被認爲是欺詐行爲。如果只是讓你記住不要再試一次,那麼保持盲目盟友和錯誤是有價值的。

考慮使用hg backout,它可以輕鬆自動地添加變更集的反轉,從而完全消除它,但保留變更集及其反轉的記錄。

如果你真的不能購買到這個概念,試試看clone -r。它可以讓你克隆你的倉庫到某個特定的點。例如:

hg clone -r -6 myrepo partial-myrepo 
mv myrepo myrepo-with-stuff-I-regret 
mv partial-myrepo myrepo 

將用一個新的副本替換您的回購,其中省略了最後五個變更集。

Ther有很多其他方法可以使用不屬於mercurial默認工具集(擴展名如histedit,strip,mercurial queues等)的工具來做同樣的事情,但最好不要刪除歷史記錄所有,如果你這樣做沒有擴展。

+0

當科學家擁有實驗室和日誌並記下他應該保存在別處或他的頭上的密碼時,並非如此。當一個開發者犯了一個信息泄露的錯誤,保持這個錯誤並不是最好的。有些錯誤不是代碼錯誤,有些是密碼和私鑰以及必須在發佈之前被擦除/提取的專有文檔。使用SVN,它就像svnadmin dump,全局替換一樣簡單,從轉儲恢復新的倉庫。對於hg來說應該很容易,因爲它是一個常見的事故。 – codenheim 2016-02-24 11:40:54

+0

當然,但這個問題是關於破碼的。 Histedit和朋友對歷史的實際修改比傾倒和恢復更容易,但是當然對於任何系統來說,其他人已經得到的任何東西都已經消失。通常最好只創建新的憑據。 – 2016-02-24 17:08:33

4

您可以使用convert extension來做到這一點。
雖然我不明白爲什麼人們總是想在他們的VCS歷史中隱藏/刪除他們犯了錯誤。只要你將它修復到更新的版本中,這並不是那麼重要......

+0

gizmo,我完全同意刪除歷史是一個壞主意。 – 2010-09-24 15:57:04

+0

當您有敏感信息需要完全擦除而不會丟失項目歷史時,這並不是一個壞主意。一個常見的錯誤是發現一個敏感的密碼被檢入到需要發佈給更廣泛的受衆的項目中。關於最佳實踐的談話是無關緊要的,能夠解決這一問題纔是最重要的。汞是一種動力工具。它不應該爲我思考。事實是,敏感信息會出來。問題是我們失去了什麼來完成它。強迫用戶使用核選項並不是最好的方法。 – codenheim 2016-02-24 11:26:56

相關問題