我如何告诉(本地)mercurial服务器未发布?

问题描述 投票:0回答:2

当我无权访问远程 .hg/hgrc 文件时,如何告诉 Mercurial 远程服务器(例如最初在

bitbucket
上,但它们不再支持 Mercurial)处于非发布状态?

背景

mercurial 的最新版本有一个 phases 的概念,它允许人们跟踪哪些变更集已共享 (

public
) 和哪些变更集尚未共享 (
draft
)。
rebase
之类的存储库更改操作允许在
draft
变更集上进行,但不能在
public
变更集上进行,因为其他操作可能依赖于后者。

默认情况下,将变更集推送到公共服务器会将其阶段更改为

public
,但如果服务器是私有的或专用于代码审查(即人们不应该能够拉取),则推送到该“非发布”服务器不应改变相位。

告诉 Mercurial 服务器处于非发布状态的 记录方式 是将

[phases]
部分添加到服务器上的
.hg/hgrc
文件中:

[phases] publish = False
在我看来,应该有一种方法可以在我的本地 

hgrc

 文件中包含一行,表明特定服务器是非发布的,但我找不到任何文档来建议如何操作。也许可以用钩子来定制这种行为?

参考文献

  • https://www.mercurial-scm.org/wiki/Phases
  • Mercurial 阶段简介
  • 推送到审核存储库后,变基时出现“中止:无法变基不可变变更集”
mercurial mercurial-phases
2个回答
4
投票
目前还没有办法做到这一点,希望它永远不会发生。

原因如下:

如果您允许本地存储库覆盖远程存储库配置,那么您只会使整个阶段机制变得毫无用处。这些阶段的重点是防止用户执行可能“破坏”同步流程的操作。
接收者有责任描述如何使用接收到的变更集。如果您通过允许发送者覆盖这些设置来颠倒该逻辑,那么如何确保两个发送者将使用相同的配置?如果配置不同,应该保留哪一个?变更集应如何在接收器上标记?

在某种程度上,这就像本地存储库能够在未经授权的情况下将变更集推送到远程,只需在本地覆盖远程配置即可。


2
投票
我知道这个问题已经有 10 年历史了,但是现在我正好有这个需求,一个非常旧的 Mercurial 服务器,它甚至不知道阶段(它的所有存储库总是发布),我想在其中创建一个评论存储库.

我在这个旧的

邮件线程中找到了答案

这个想法是,您有一个公共存储库(此处称为

<public>

),其中包含所有公共提交,并且您安装拉动和推入钩子,将所有这些本地提交更改为 
draft,这些本地提交不在此公共存储库上。

[hooks] post-push = hg phase --force --draft 'public() and outgoing(<public>)' post-pull = hg phase --force --draft 'public() and outgoing(<public>)'
    
© www.soinside.com 2019 - 2024. All rights reserved.