2011-08-13 39 views
4

我有以下目录结构的Mercurial库:水银目录访问规则

/ 
/system 
/applications 
/applications/client1 
/applications/client2 
/applications/client3 

我服务于回购了Apache的子域通过HTTP(非SSL还),并想限制推送权限,拉并承诺当然。一般我不想让一些用户看到目录,也没有目录的历史!

  1. 是否有机会限制对mercurial存储库中目录的访问。
  2. 我如何才能访问客户端1文件夹仅适用于客户端1,客户端2仅适用于基于Linux的系统上的客户端2? 注意:如果没有必要,我不想将存储库拆分成子存储库!
  3. 如果这不是没有子仓库的工作,有人可以告诉我如何在这种情况下与我的目录结构的子仓库。

我失去了:(

+0

文件夹之间是否存在任何依赖关系?例如,“client1”中的文件是否知道除此之外还有一个“client2”文件夹,并直接引用这些文件?任何目录之间都存在什么样的这种依赖关系? –

回答

5

既然你拥有的一切在1个库,那么没有

TL;博士:库是始终完整,如果你可以克隆它,你可以看到一切,有没有办法来限制访问的内容在本地克隆,只到一个中央服务器托管的克隆。


一位机智善变的服务器可以处理授权两方法:

  1. 它可以限制访问存储库
  2. 它可以使用挂钩,以防止与内容推说是不允许用户修改

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

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

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

此外,用户还可以用他自己的个人克隆做他想做的任何事情。但是,尽管这种类型的授权并不完全禁止推送到中央存储库,但挂钩会查看被推送的变更集,并且如果您决定不允许该用户将更改推送到“客户端2”内容,他试图推动的任何这样的变更集将被中止。

换句话说,用户可以修改他的私有克隆,包括更改“client2”中的内容,但是如果他用“client2”更改提交更改集,他将无法推回到中央存储库。然后,他必须在他的推动才能通过之前剥离或以其他方式摆脱这些变化集。

因此,要总结:

  1. 您可以完全克隆禁止用户,这会使整个仓库无法给他
  2. 您可以禁止推动,但允许克隆
  3. 你可以使用钩分析传入的更改集,并阻止用户不允许修改的内容更改
  4. 无论如何,如果用户能够创建一个克隆,该克隆总是在用户计算机上完成并且不受限制。你不能在限制那个克隆的访问,你所能做的只是点1,禁止用户从克隆开始。
1

您可以使用ACL Extension,默认情况下,它现在与Mercurial一起分发。该扩展可以限制每个目录的所有汞行动,而不需要诉诸使用子库。

此外,你可以限制访问每个分支每个文件夹