当我无权访问远程 .hg/hgrc
文件时,如何告诉 Mercurial 远程服务器(例如最初在
bitbucket上,但它们不再支持 Mercurial)处于非发布状态?
mercurial 的最新版本有一个 phases 的概念,它允许人们跟踪哪些变更集已共享 (
public
) 和哪些变更集尚未共享 (draft
)。 rebase
之类的存储库更改操作允许在 draft
变更集上进行,但不能在 public
变更集上进行,因为其他操作可能依赖于后者。
默认情况下,将变更集推送到公共服务器会将其阶段更改为
public
,但如果服务器是私有的或专用于代码审查(即人们不应该能够拉取),则推送到该“非发布”服务器不应改变相位。
告诉 Mercurial 服务器处于非发布状态的 记录方式 是将
[phases]
部分添加到服务器上的 .hg/hgrc
文件中:
[phases]
publish = False
在我看来,应该有一种方法可以在我的本地 hgrc
文件中包含一行,表明特定服务器是非发布的,但我找不到任何文档来建议如何操作。也许可以用钩子来定制这种行为?参考文献
原因如下:
如果您允许本地存储库覆盖远程存储库配置,那么您只会使整个阶段机制变得毫无用处。这些阶段的重点是防止用户执行可能“破坏”同步流程的操作。
接收者有责任描述如何使用接收到的变更集。如果您通过允许发送者覆盖这些设置来颠倒该逻辑,那么如何确保两个发送者将使用相同的配置?如果配置不同,应该保留哪一个?变更集应如何在接收器上标记?
我在这个旧的
邮件线程中找到了答案:
这个想法是,您有一个公共存储库(此处称为<public>
),其中包含所有公共提交,并且您安装拉动和推入钩子,将所有这些本地提交更改为draft,这些本地提交不在此公共存储库上。
[hooks]
post-push = hg phase --force --draft 'public() and outgoing(<public>)'
post-pull = hg phase --force --draft 'public() and outgoing(<public>)'