2012-10-25 24 views
8

在Mercurial中,修訂的階段可以任意更改。 (公開,草稿,祕密)x(公開,草案,祕密)?哪些階段變化是安全的?這可能會導致麻煩和哪種麻煩?哪些是或多或少沒有操作?Mercurial:改變階段的後果是什麼?

回答

8

提交的默認階段是draft,這就是他們在階段不存在時的處理方式。當推送draft變更集時,mercurial會自動將其階段更改爲public。您可以使用它來了解您已發佈或未發佈的變更集。

但真正的問題是,當變更爲public階段,水銀不會讓你與歷史編輯擴展更改它們(如mqrebase等)。這非常重要,因爲歷史編輯在本地存儲庫中僅發生只有,它們不會與pull/push操作一起傳播。所以,一旦變更集發佈,它就失控了,改變它是很危險的。

您可以從任何階段更改爲任何其他階段。 「正常流量」是移至較高階段(secret-> draft-> public),但Mercurial允許將更改設置爲--force選項的較低階段。單獨的相變是無害的。例如,從public移動到draftsecret時發生的唯一一件事情是,歷史編輯的保護被刪除,沒有別的,拉和推將仍然正常工作,Mercurial永遠不會對變更集產生混淆,因爲它們具有唯一的標識符。在之後發生的歷史編輯行爲這樣的相位變化是什麼會導致問題。這就是爲什麼Mercurial會在相位變化中發出警告並要求使用--force選項,以此確認您真正想要的。

在一般公佈的提交不應該被修改,這是階段試圖確保。但是,也許你可以控制所有的存儲庫。或者,也許你推了些東西,而且你知道沒有其他人拉它。無論是什麼原因,您都可以選擇強制變更集的階段重新生成並編輯它們。但是這個版本必須在每個有變更集的倉庫中完成。

+0

感謝這些細節,但它不能回答我的問題:更改現有變更集的階段時會發生什麼?例如。從公開場合到已經推出的變更集的祕密?這是否有效或可能會混淆Mercurial? – mstrap

+0

您可以從任何階段更改爲任何階段。會發生什麼情況是,如果您嘗試更改爲較低階段,則必須使用「--force」進行確認。相變本身不會引起任何問題。什麼會導致問題是你在改變階段後所做的。當你從'public'變成'draft'時,你正在消除歷史編輯的保護,它可以讓你搞砸了。 –

+0

Mercurial怎麼樣 - 它可以通過從公開變爲草稿而變得困惑嗎? – mstrap

5
  • 一個公共修改不能與歷史編輯工具進行編輯(即mqrebase)。
  • A 祕密修訂版不能推送到另一個存儲庫(當您提供push命令或其他存儲庫嘗試提取時,它將被忽略)。
  • A 草稿版本允許這兩個版本,但如果它被推送到另一個存儲庫,則會自動更改爲public

相系統的目的是爲了防止你修改修訂您已經將其推到另一個倉庫,這是一個壞主意,除非你能夠從所有刪除舊版本的修訂後它被推送到的存儲庫。

所有的相位變化都或多或少沒有操作;它只是一個標誌,指出修訂版本的作用或不安全。

相關問題