Mercurial:改变阶段的后果是什么?

时间:2012-10-25 15:14:51

标签: mercurial phase

在Mercurial中,修订阶段可以任意改变。所有可能的转换(公共,草案,秘密)x(公共,草案,秘密)的相变有什么后果?哪些相变是安全的?哪个可能会引起麻烦和哪种麻烦?哪些是或多或少的无操作?

2 个答案:

答案 0 :(得分:9)

提交的默认阶段是draft,这是阶段不存在时的处理方式。推送draft变更集时,mercurial会自动将其阶段更改为public。您可以使用它来了解您已发布的变更集。

但真正的问题是,当变更集处于public阶段时,mercurial将不允许您使用历史记录编辑扩展程序(例如mqrebase等)更改它们。这非常重要,因为历史记录编辑在本地存储库中仅发生 ,它们不会随pull / push操作一起传播。因此,一旦发布变更集,它就会失控,改变它是危险的。

您可以从任何阶段更改为任何其他阶段。 “正常流程”将移至更高阶段(secret-> draft-> public),但Mercurial允许使用--force选项更改为较低阶段。仅相变是无害的。例如,从public移动到draftsecret时发生的唯一事情就是删除了历史编辑的保护,没有别的,拉动和推动仍然可以正常工作,Mercurial永远不会对变更集感到困惑,因为它们具有唯一标识符。 之后发生的历史编辑操作就像这样会导致问题。这就是为什么Mercurial在相变中发出警告并需要--force选项,以确认这是你真正想要的。

一般情况下,已发布的提交不得修改,这是阶段试图确保的内容。但也许您可以控制所有存储库。或者也许你推了一些东西,而且你知道没有人拉过它。无论是什么原因,您都可以选择强制将变更集的阶段恢复为草稿并进行编辑。但是,此版本必须在具有更改集的每个存储库中完成。

答案 1 :(得分:5)

  • 无法使用历史记录编辑工具(即mqrebase)修改公共修订版。
  • secret 修订版无法推送到另一个存储库(当您提供push命令时,或者当另一个存储库尝试提取时,它将被忽略)。
  • 草稿版本允许两者,但如果将其推送到另一个存储库,则会自动更改为 public

阶段系统的目的是防止您在将修订版推送到另一个存储库后修改修订版,这是一个坏主意,除非您能够从所有存储库中删除旧版本的修订版。被推到了。

所有相变都或多或少是无操作;它只是一个标记,用于指示修订版本的安全性或安全性。