Mercurial Acl Extension拒绝拉一些文件

时间:2010-07-13 09:20:56

标签: mercurial cvs acl

我是新的善变用户。我设置了acl扩展名,将其添加到我的hgrc文件中:

[hooks]
pretxnchangegroup.acl = python:hgext.acl.hook

[acl]
sources = serve pull push

[acl.deny]
** = mercurial

因此,使用上面的代码,我拒绝访问用户“mercurial”的所有文件。我成功测试了acl扩展,当我尝试推送到我放置上面代码的中央存储库时,它工作得很好。正如预期的那样,我收到的消息是拒绝用户“mercurial”的访问。

现在的问题是,当我从中央存储库开始时,我没有任何限制,所以我可以不受任何限制地提取任何内容。我想要的是拒绝某些文件的拉取访问权限,就像我在尝试推送命令时所做的那样。我有什么方法可以做到这一点吗?

3 个答案:

答案 0 :(得分:1)

与Subversion不同,Mercurial不允许对单个文件进行控制,这是有充分理由的。 DVCS模型将整个存储库放在每个开发人员的计算机上,因此即使您在推送和拉取时限制文件,用户仍然可以hg cat该文件来获取其内容。

而不是尝试在客户端这样做,而是根据谁需要什么来设置你的回购并设置个人回购的权限。请参阅Kiln堆栈交换Should I use more than one repository?上的答案。您可以通过http(s)或SSH设置权限,或者如果您正好使用Kiln,则可以通过我们的权限界面设置权限。

答案 1 :(得分:1)

正如在tghw的评论中所说,听起来你真正想要的是通过文件路径进行部分克隆,这样一个人可以克隆或下拉某些文件或目录,但这在Mercurial(或git)中是不可能的。情况就是这样,因为每个修订版都由唯一的哈希标识,其中包括所有文件更改的哈希值。如果您没有所有文件,则表示您没有进行所有更改,也无法验证哈希值。

如果您确实需要隐藏某些人的某些文件的读取权限,则需要将它们拆分为单独的存储库。

答案 2 :(得分:-3)

我有一个解决方案:

将您的回购转换为git:

https://git.wiki.kernel.org/index.php/Interfaces,_frontends,_and_tools#Mercurial