2012-08-06 53 views
1

昨晚我最終檢查了生產登錄信息到版本庫中。因爲我現在是唯一一個在這方面工作的開發者,所以這不是什麼大問題,但是將來生產細節暴露並不是很好。如何永久刪除Mercurial中的更改集?

我最終什麼事做打算在服務器上:

hg clone <old repo> <new repo> -r <revision> 

克隆只到修改前的錯誤提交,並刪除了

我測試,它似乎罰款。我認爲我在這裏問得更好,確定我是否確實沒有隱藏的歷史記錄或隱藏的腳印來揭露那些不良行爲的內容?

很多謝謝,

回答

0

您的clone命令將起作用,但如果您的存儲庫有多個分支,則該克隆將不包含它們。所以,除非你小心翼翼地把它們分開,否則你可能比你想要的更多。可能這不是你想要的...

刪除修訂版本的最簡單方法是使用MQ extension中的strip命令。您可以將此與rebase命令(Rebase extension)結合使用,以刪除已保留孩子的變更集;先把rebase孩子放到父母身上,然後strip這個違規變元。

請務必注意這些是歷史修改操作,所以如果變更集已經與其他用戶共享過,它仍然會在他們的存儲庫中。即使他們拉了。他們需要重複你的步驟來擺脫它們,這在屁股上是相當痛苦的。這種改變甚至可能意外地以這種方式結束回主存儲庫。 (注意:這也適用於您的clone方法。)

因此,如果您需要這樣做,最好指示您的所有用戶創建一個新的克隆,或者至少剝離更改並製作掛鉤以防止重新引入變更集。如果您無法聯繫和/或信任您的所有用戶(例如,因爲它是開源的),可能最好將更改集保留在那裏,並更改您的生產憑證。無論如何,它已經在野外。

將來會有更好的方法去除或修改Mercury 2.4中的「過期」功能。一旦完全實施,當用戶從您的存儲庫中提取他們的存儲庫的歷史可以自動更新。所以請留意這個功能。

+0

由於我是唯一的用戶,沒有人有任何歷史。 :)我更關心未來,再一次的開發者會加入這個團隊。我之前嘗試過Strip,但儘管在我的hg.config文件中有'mq =',但我無法激活擴展。 – Houman 2012-08-07 09:16:18

1

別擔心。刪除<old repo>後,它肯定沒有了。儘管法醫專家仍然可以在磁盤上刪除的塊中找到有趣的東西。

+0

+1從我和我選擇另一個答案爲未來的參考。謝謝 – Houman 2012-08-07 09:14:24