Mercurial幫助文本指出,「strip命令刪除指定的變更集及其所有後代。」這聽起來很像是給我重寫歷史,而且如果有人將他的工作建立在突然被刪除的變更集之一上,那麼這肯定會導致問題。但是幫助文本還表示,該命令「不是歷史重寫操作,可以用於公共階段的變更集。」我確信編寫幫助文本的人非常清楚他在做什麼,所以我錯過了解這一點?爲什麼Mercurial的strip命令不能重寫歷史記錄?
回答
我不能肯定地說,但我的猜測是它是「盛大的」。 hg strip
作爲mq
的一部分開始,其早於階段至少三年。
可能更措辭是:
不是*認爲*歷史重寫操作,可以在變更集公共階段
當相加入了大量的使用小心謹慎地打破了沒有人的現有工作流程。承諾開始在草案階段,併成爲公衆一旦推。任何階段感知命令知道在推送提交階段之後是public並且不允許修改(除非推送到非發佈存儲庫...)。
然而,有已經在使用手動strip
和腳本刪除已推人的變更,如果strip
後升級突然說了:「嘿,你不能剝奪它的大衆!」那麼這些人就會失去向後兼容的承諾。
階段正在慢慢成長爲一個相當驚人的evolve系統,對於幾乎所有情況來說,這將是一個比mq更好的選擇,但是我仍然懷疑我們是否會讓Matt去除mq和strip - 他仍然堅持維護一個Python 2.4兼容的代碼庫,這是9歲!
Tl; Dr:儘管strip
始終是禁用的擴展,但有太多人使用它來改變其階段出現時的行爲。
關鍵在於,如果您剝離公共變更集,然後再從某個地方將其拉出,則不會造成任何問題。你只需要返回原始的變更集。
如果您(例如)將兩個公共變更集合合併在一起,然後從某處取出原始文檔,則您現在有兩個分支。一個具有原始的兩個變更集,另一個具有摺疊的變更集,但都具有相同的變更。在那時,地獄爆發,孩子們吃着怪物漫遊地球。
因此,「歷史重寫」與「歷史剝離」不同。
davidmc24由馬特·麥考爾(Mercurial的父親),他說基本上是一回事
我愛孩子吃怪物。 –
- 1. Mercurial的功能歷史記錄
- 2. proc_open for php的命令歷史記錄
- 3. vim8重新使用命令不工作的歷史記錄
- 4. 重寫未發佈的歷史記錄有什麼缺點?
- 5. 爲什麼'hg mv'(mercurial)默認不會移動文件的歷史記錄?
- 6. Firebug命令行歷史記錄
- 7. 檢索命令行歷史記錄
- 8. 爲什麼會將iframe的歷史記錄添加到歷史記錄中
- 9. psql:如何不記錄單個命令到歷史記錄中
- 10. 從SSH命令行歷史記錄刪除特定歷史
- 11. 爲什麼我的控制檯應用程序有命令歷史記錄?
- 12. 爲什麼R(JGR)的Java GUI中沒有命令歷史記錄?
- 13. Shell命令獲取特定命令的歷史記錄
- 14. Emacs shell:重啓後丟失的命令歷史記錄
- 15. GWT歷史令牌重寫
- 16. Shell歷史命令 - 功能
- 17. 貝寶Sandbox歷史記錄重定向到REAL歷史記錄
- 18. ipython筆記本重新安排命令歷史命令
- 19. 如何在mercurial中重寫歷史記錄以修改作者的姓名?
- 20. 爲工作流程歷史記錄執行Sitecore獲取命令
- 21. JavaScript - 基本URL重寫+在歷史記錄中創建記錄
- 22. 將Mercurial存儲庫的歷史記錄擴展爲過去
- 23. GWT歷史記錄:歷史記號
- 24. MATLAB命令歷史記錄:如何保存備份的現有歷史
- 25. VSO git文件歷史中的「簡單歷史記錄(默認)」和「完整歷史記錄」有什麼區別?
- 26. Gremlin命令歷史記錄在Titan中不起作用1.0.0
- 27. 不要將命令添加到MySQL CLI歷史記錄中
- 28. Git - 重寫歷史記錄和將文件夾視爲分支
- 29. Cygwin'less'命令使bash忘記屏幕緩衝區歷史記錄
- 30. 如何讓Azure PowerShell記住命令行歷史記錄?
感謝Ry4an指出this post。我讚賞更正和解釋。 –
這是否意味着'strip'不會去除changsets,而只是_hides_它們?我正在尋找一種在發佈前從開發中100%_remove_ minor commit的方法。這是安全的,也是一個非常重要的特性,因爲作爲開發人員,您應該經常進行本地提交(這是DVCS的優勢之一,不是嗎?),並將「每個功能一次提交」更改集合併爲主分支(這就是所有主分支的外觀,例如Python,Sphinx等)。有沒有什麼辦法可以通過Mercurial使用「階段」以明確的方式實現? – Iodnas
Strip **刪除**。我的觀點是,它在階段系統的範圍之外這麼做,因爲它早於3年。 –