2012-12-07 66 views
6

Mercurial幫助文本指出,「strip命令刪除指定的變更集及其所有後代。」這聽起來很像是給我重寫歷史,而且如果有人將他的工作建立在突然被刪除的變更集之一上,那麼這肯定會導致問題。但是幫助文本還表示,該命令「不是歷史重寫操作,可以用於公共階段的變更集。」我確信編寫幫助文本的人非常清楚他在做什麼,所以我錯過了解這一點?爲什麼Mercurial的strip命令不能重寫歷史記錄?

回答

1

我不能肯定地說,但我的猜測是它是「盛大的」。 hg strip作爲mq的一部分開始,其早於階段至少三年。

可能更措辭是:

不是*認爲*歷史重寫操作,可以在變更集公共階段

當相加入了大量的使用小心謹慎地打破了沒有人的現有工作流程。承諾開始在草案階段,併成爲公衆一旦推。任何階段感知命令知道在推送提交階段之後是public並且不允許修改(除非推送到非發佈存儲庫...)。

然而,有已經在使用手動strip和腳本刪除已推人的變更,如果strip後升級突然說了:「嘿,你不能剝奪它的大衆!」那麼這些人就會失去向後兼容的承諾。

階段正在慢慢成長爲一個相當驚人的evolve系統,對於幾乎所有情況來說,這將是一個比mq更好的選擇,但是我仍然懷疑我們是否會讓Matt去除mq和strip - 他仍然堅持維護一個Python 2.4兼容的代碼庫,這是9歲!

Tl; Dr:儘管strip始終是禁用的擴展,但有太多人使用它來改變其階段出現時的行爲。

+0

感謝Ry4an指出this post。我讚賞更正和解釋。 –

+1

這是否意味着'strip'不會去除changsets,而只是_hides_它們?我正在尋找一種在發佈前從開發中100%_remove_ minor commit的方法。這是安全的,也是一個非常重要的特性,因爲作爲開發人員,您應該經常進行本地提交(這是DVCS的優勢之一,不是嗎?),並將「每個功能一次提交」更改集合併爲主分支(這就是所有主分支的外觀,例如Python,Sphinx等)。有沒有什麼辦法可以通過Mercurial使用「階段」以明確的方式實現? – Iodnas

+0

Strip **刪除**。我的觀點是,它在階段系統的範圍之外這麼做,因爲它早於3年。 –

7

關鍵在於,如果您剝離公共變更集,然後再從某個地方將其拉出,則不會造成任何問題。你只需要返回原始的變更集。

如果您(例如)將兩個公共變更集合合併在一起,然後從某處取出原始文檔,則您現在有兩個分支。一個具有原始的兩個變更集,另一個具有摺疊的變更集,但都具有相同的變更。在那時,地獄爆發,孩子們吃着怪物漫遊地球。

因此,「歷史重寫」與「歷史剝離」不同。


davidmc24由馬特·麥考爾(Mercurial的父親),他說基本上是一回事

+0

我愛孩子吃怪物。 –

相關問題