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

mst*_*rap 9 mercurial phase

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

Raf*_*olo 10

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

但真正的问题是,当变更为public阶段,水银不会让你与历史编辑扩展更改它们(如mq,rebase等).这非常重要,因为历史编辑在本地存储库中进行,它们不会与pull/ pushoperations一起传播.因此,一旦发布变更集,它就会失控,改变它是危险的.

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

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


Bri*_*and 5

  • 一个公共版本无法与历史编辑工具(如编辑mq,rebase).
  • 一个秘密的修订不能推到另一个仓库(当你给推命令,或者在另一个仓库试图把它拉将被忽略).
  • 一个草案修订允许两个,但会自动更改为公共,如果它得到推到另一个仓库.

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

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