Mercurial目录访问规则

Tsc*_*hef 5 mercurial access-control

我有一个mercurial存储库,具有以下目录结构:

/
/system
/applications
/applications/client1
/applications/client2
/applications/client3
Run Code Online (Sandbox Code Playgroud)

我通过http(还没有ssl)在apache子域上提供repo,并希望限制push,pull和commit的访问权限.一般来说,我不希望一些用户看到目录,也不希望目录的历史记录!

  1. 是否有机会限制对mercurial存储库中目录的访问.
  2. 如何仅为基于linux的系统上的client2为client1,client2提供对client 1文件夹的访问权限?注意:如果没有必要,我不想将存储库拆分为子存储库!
  3. 如果这在没有子存储库的情况下不起作用,有人可以告诉我如何使用我的目录结构在子存储库中执行此操作.

我搞不清楚了 :(

ang*_*son 4

既然您在 1 个存储库中拥有所有内容,那么就不会。

tl;dr:存储库总是完整的,如果您可以克隆它,您就可以看到所有内容,没有办法限制对本地克隆中内容的访问,只能限制对中央服务器托管的克隆的访问。


Mercurial 服务器可以通过两种方式处理授权:

  1. 它可以限制对存储库的访问
  2. 它可以使用钩子来防止推送不允许用户修改的内容

第一种类型将使整个存储库只读或不可用。但是,如果用户具有读取访问权限,他将能够克隆并查看整个存储库、历史记录和文件等。

但是,您可以通过禁止推送来阻止同一用户修改中央副本。这意味着该用户可以使用自己的私有克隆做任何他想做的事情,但他无法将这些更改推回到中央克隆。

另一种类型允许您更细粒度地控制允许发生更改的位置。但是,请再次注意,用户将能够克隆并查看整个存储库。

此外,用户还可以使用自己的个人克隆做任何他想做的事情。然而,虽然这种类型的授权并不完全禁止推送到中央存储库,但挂钩会查看正在推送的变更集,并且如果您决定不允许该用户将更改推送到“client2”内容,他尝试推送的任何此类变更集都将被中止。

换句话说,用户能够修改他的私有克隆,包括更改“client2”中的内容,但如果他提交包含“client2”更改的变更集,他将无法推送回中央存储库。然后,在他的推送完成之前,他必须剥离或以其他方式删除这些变更集。

总结一下:

  1. 您可以完全禁止用户克隆,这将使整个存储库对他不可用
  2. 您可以禁止推送,但允许克隆
  3. 您可以使用挂钩来分析传入的变更集,并防止对不允许用户修改的内容进行更改
  4. 无论如何,如果用户能够进行克隆,则该克隆在用户计算机上始终是完整且不受限制的。您无法限制该克隆的访问,您所能做的就是第 1 点,从一开始就禁止用户进行克隆。