2010-07-13 41 views
1

我是新的mercurial用户。我设置的ACL扩展加入到这一点我hgrc文件:Mercurial Acl Extension拒绝部分文件的拉动

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

[acl] 
sources = serve pull push 

[acl.deny] 
** = mercurial 
与此代码

所以上面我拒绝访问所有文件到用户的“善变”。我成功地测试了acl扩展,当我尝试推送到我在上面放置代码的中央存储库时,它完美地工作。正如所料,我收到消息,用户访问“mercurial”被拒绝。

现在的问题是我什么时候开始从中央存储库拉我没有任何限制,所以我可以拉任何东西没有任何限制。我想要的是拒绝对某些文件的访问权限,就像我尝试push命令时所做的那样。有什么办法可以做到这一点?

回答

1

与Subversion不同的是,Mercurial不允许对单个文件进行控制,并且有很好的理由。 DVCS模型将整个回放放在每个开发人员的机器上,因此,即使您在推送和拉动上限制文件,用户仍然可以仅使用hg cat文件来获取其内容。

而不是试图在客户端做到这一点,我会反而根据谁需要什么和设置个人回购权限来打破您的回购协议。在Kiln堆栈交换Should I use more than one repository?上查看我的回答。您可以通过http(s)或SSH设置权限,或者如果您恰好使用Kiln,则可以通过我们的权限界面进行设置。

+0

感谢您的重播,但现在我不知道该怎么办。我有一个项目,我想限制对该项目上某些文件的特定用户的访问。有没有什么不同的方式来做到这一点,并保持这个项目的和平? – Danilo 2010-07-13 13:38:23

+0

您限制访问什么类型的文件?你将如何强制他们使用你的钩子? – tghw 2010-07-13 14:27:07

+0

再次感谢您的回答。 我想限制访问一些PHP脚本。但是有一个问题和你的第二个问题是一样的。如何强制使用我的钩子以及如何设计该钩子以便能够识别那些我想要限制的文件? – Danilo 2010-07-13 14:38:09

-3

我有一个解决办法:

您的回购转换为混帐:

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

+0

Danilo正在寻找的是“通过filepath进行部分克隆”,这在git中也不可行:http:// stackoverflow。com/questions/2586824/partial-clone-with-git-and-mercurial – 2011-03-04 04:00:26

+0

它可能在git中:http://sitaramc.github.com/gitolite/doc/gitolite.conf.html#_basic_access_control – 2011-03-05 09:55:28

1

由于与tghw的意见出来了,这听起来像你真正想要的是文件路径部分克隆,这样一个人就可以克隆或拉下特定的文件或目录,但这在Mercurial(或git)中是不可能的。情况就是这样,因为每个修订都由一个唯一的散列标识,其中包括所有文件更改的散列。如果您没有所有文件,则没有进行所有更改,并且无法验证散列。

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