在Mercurial中,修订阶段可以任意改变。所有可能的转换(公共,草案,秘密)x(公共,草案,秘密)的相变有什么后果?哪些相变是安全的?哪个可能会引起麻烦和哪种麻烦?哪些是或多或少的无操作?
答案 0 :(得分:9)
提交的默认阶段是draft
,这是阶段不存在时的处理方式。推送draft
变更集时,mercurial会自动将其阶段更改为public
。您可以使用它来了解您已发布的变更集。
但真正的问题是,当变更集处于public
阶段时,mercurial将不允许您使用历史记录编辑扩展程序(例如mq
,rebase
等)更改它们。这非常重要,因为历史记录编辑在本地存储库中仅发生 ,它们不会随pull
/ push
操作一起传播。因此,一旦发布变更集,它就会失控,改变它是危险的。
您可以从任何阶段更改为任何其他阶段。 “正常流程”将移至更高阶段(secret-> draft-> public),但Mercurial允许使用--force
选项更改为较低阶段。仅相变是无害的。例如,从public
移动到draft
或secret
时发生的唯一事情就是删除了历史编辑的保护,没有别的,拉动和推动仍然可以正常工作,Mercurial永远不会对变更集感到困惑,因为它们具有唯一标识符。 在之后发生的历史编辑操作就像这样会导致问题。这就是为什么Mercurial在相变中发出警告并需要--force
选项,以确认这是你真正想要的。
一般情况下,已发布的提交不得修改,这是阶段试图确保的内容。但也许您可以控制所有存储库。或者也许你推了一些东西,而且你知道没有人拉过它。无论是什么原因,您都可以选择强制将变更集的阶段恢复为草稿并进行编辑。但是,此版本必须在具有更改集的每个存储库中完成。
答案 1 :(得分:5)
mq
,rebase
)修改公共修订版。阶段系统的目的是防止您在将修订版推送到另一个存储库后修改修订版,这是一个坏主意,除非您能够从所有存储库中删除旧版本的修订版。被推到了。
所有相变都或多或少是无操作;它只是一个标记,用于指示修订版本的安全性或安全性。