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



在Mercurial中,修订的阶段可以任意更改。所有可能的过渡(公共,草稿,秘密)X(公共,草稿,秘密)的阶段变化的后果是什么?哪个相变安全?哪些可能会引起麻烦以及哪种麻烦?哪些或多或少的否?

提交的默认阶段是 draft,这就是当阶段不存在时对其进行处理的方式。推动draft更改时,Mercurial会自动将其相位更改为public。您可以使用它来知道您是否已经发布了哪些更改。

但真正的问题是,当更改处在public阶段时,Mercurial将不会让您通过历史编辑扩展(例如mqrebase等)更改它们。这确实很重要,因为历史编辑仅发生在本地存储库中,它们不会与pull/push操作传播。因此,一旦发布了更改,它就失控了,更改它是危险的。

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

一般而言,发布的委托没有修改,这就是阶段试图确保的。但是也许您确实可以控制所有存储库。或者,也许您推了一些东西,您知道还没有人拉它。不管是什么原因,您都可以选择将更改的阶段迫使草稿和编辑。但是此版本必须在具有更改集的每个存储库中完成。

  • a public 修订版无法使用历史编辑工具进行编辑(即mqrebase)。
  • a 秘密修订版无法将其推向另一个存储库(当您提供推送命令时,或者其他存储库尝试拉动时将被忽略)。
  • a 草稿修订允许两者都可以,但如果将其推到另一个存储库,则会自动更改为 public

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

所有相变或多或少是无op的;这只是指示修订时做什么或不安全的标记。

最新更新