【问题标题】:How do I tell (locally) mercurial that a server is non-publishing?我如何告诉(本地)mercurial 服务器未发布?
【发布时间】:2012-05-23 19:11:37
【问题描述】:

当我无权访问远程 .hg/hgrc 文件时,如何告诉 mercurial 远程服务器(例如最初在 bitbucket,但它们不再支持 Mercurial)未发布?

背景

最新版本的 mercurial 有一个 phases 的概念,它允许跟踪哪些变更集已共享 (public),哪些未共享 (draft)。在 draft 变更集上允许像 rebase 这样的存储库更改操作,但在 public 变更集上不允许,因为其他人可能依赖于后者。

将变更集推送到公共服务器将默认将其阶段更改为public,但如果服务器是私有的或专用于代码审查(即人们不应该能够拉取),那么推送到那个“非发布" 服务器不应该改变阶段。

告诉 mercurial 服务器不发布的documented way 是在服务器上的.hg/hgrc 文件中添加一个[phases] 部分

[phases]
publish = false

在我看来,应该有一种方法可以在我的本地 hgrc 文件之一中包含一行,说明特定服务器未发布,但我找不到任何文档来建议如何发布。也许这种行为可以用钩子来定制?

参考文献

【问题讨论】:

  • 一个好点,我怀疑最好在邮件列表中提出。也许对outgoing 进行更改,以便列出是否需要更改阶段。
  • 此问题的未来查看者请注意:BitBucket 现在可以选择将存储库配置为非发布。在这种情况下,不需要执行 OP 要求的操作。我怀疑需要因为这将消退.. 例如,Mozilla 用户存储库自 2015 年 2 月起不再发布 (mozilla-version-control-tools.readthedocs.org/en/latest/…)
  • 专门针对 bitbucket(已标记),you can configure this in the repository’s settings
  • 文档现在说“publish = False”而不是“publishing = false”
  • @ecm 我已经删除了 bitbucket 标签并添加了评论。在先前表示对 mercurial 的承诺之后,Atlassian 放弃了 mercurial 用户的事情非常不幸。我们现在使用本地的Heptapod 实例,确实没有这个问题。

标签: mercurial mercurial-phases


【解决方案1】:

目前没有办法做到这一点,希望它永远不会发生。

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

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

【讨论】:

  • 我同意正确的做法是设置服务器,但我不能(1.9版,我没有权限)。但是,与您的反例不同,我的建议不会影响服务器,因此我认为没有理由不提供这种本地覆盖(基于需要使用,因为服务器已损坏) .毕竟,我可以通过手动重新定相来痛苦地达到相同的效果。回答你的问题:当服务器不知道阶段时,它会像 1.9 的情况一样忽略客户端。这只是关于本地管理。
  • 我不明白要求接收方参与有什么意义,尤其是托管服务。在托管服务中,创建一个只有您可以访问但不可能将其标记为非发布的私有分支可能是非常有可能和容易并得到每个人的支持,因为托管服务提供商尚未实施它。在~/.hgrc 中将其标记为非发布遥控器是很自然的。
猜你喜欢
  • 2017-08-08
  • 1970-01-01
  • 2015-02-20
  • 1970-01-01
  • 2017-10-18
  • 1970-01-01
  • 1970-01-01
  • 2015-11-05
  • 1970-01-01
相关资源
最近更新 更多