Mercurial - 如何禁用推送

Mercurial - How to disable push

我正在尝试查找是否有一种简单的方法可以将 Mercurial 存储库设置为只读。用户应该能够克隆,但不允许推送。我需要为超过 100 个的所有存储库执行此操作。

仅通过 http 提供它们(hg serve、kallithea...)并且不提供登录凭据。

这取决于您发布存储库的方式,但您可以根据以下几点进行尝试:

  1. 如果您在网络共享或挂载的卷上发布您的存储库,只需设置 mercurial 文件夹的访问权限,使其仅具有对该文件夹及其文件的读取权限
  2. 如果您使用任何可用的 http 服务器选项发布您的存储库,例如 hg serve 或您可以安装的任何第 3 方网站,请确保您设置的用户没有 write/push访问
  3. 如果您使用任何基于云的在线解决方案(如 bitbucket、kiln 等)发布您的存储库,那么请不要将推送访问权授予任何不应该拥有它的人,同样,您可以专门设置用户和访问权限

您有很多存储库,它们的 URL 是已知的并且已经用于克隆它们,而您刚刚决定要关闭对它们的推送访问。这是对的吗?

如果通过 ssh 访问存储库,您可以通过简单地将存储库文件的所有权重新分配给一个新帐户来实现,其他用户可以自由读取,但不能写入。文件位置保持不变,当前访问凭据仍然有效,但不再可能推送到存储库。

如果您使用的是 unix 系统,您可以使用 for 循环和 chown -R 完成 bash 中的所有操作。如果你不是……祝你好运。向我们提供有关您的配置的更多信息,答案中提出的方法之一最适合。

您可以在 .hg/hgrc:

中这样做
[hooks]
prechangegroup = false

要禁用通过 http 或 https 推送,您可以在 hgrc 文件中尝试以下操作之一。请注意,这不会禁用推送文件系统。

allow_push

是否允许推送到版本库。如果为空或未设置,则不允许推送。如果使用特殊值 *,则任何远程用户都可以推送,包括未经身份验证的用户。否则,远程用户必须已经过身份验证,并且经过身份验证的用户名必须出现在该列表中(以空格或“,”分隔)。 allow_push 列表的内容在 deny_push 列表之后检查。

[web]
allow_push =

deny_push

是否拒绝推送到存储库。如果为空或未设置,则不会拒绝推送。如果特殊值*,则拒绝所有远程用户推送。否则,未经身份验证的用户将全部被拒绝,并且此列表中存在的任何经过身份验证的用户名(以空格或“,”分隔)也将被拒绝。 deny_push 列表的内容在 allow_push 列表之前检查。

[web]
deny_push = *