Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mercurial Acl扩展名拒绝拉取某些文件_Mercurial_Cvs_Acl - Fatal编程技术网

Mercurial Acl扩展名拒绝拉取某些文件

Mercurial Acl扩展名拒绝拉取某些文件,mercurial,cvs,acl,Mercurial,Cvs,Acl,我是mercurial的新用户。我设置了acl扩展,并将其添加到我的hgrc文件中: [hooks] pretxnchangegroup.acl = python:hgext.acl.hook [acl] sources = serve pull push [acl.deny] ** = mercurial 因此,使用上面的代码,我拒绝用户“mercurial”访问所有文件。我成功地测试了acl扩展,当我尝试将推送到我的中央存储库(我将代码放在上面)时,它工作得非常好。正如所料,我收到一条

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

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

[acl]
sources = serve pull push

[acl.deny]
** = mercurial
因此,使用上面的代码,我拒绝用户“mercurial”访问所有文件。我成功地测试了acl扩展,当我尝试推送到我的中央存储库(我将代码放在上面)时,它工作得非常好。正如所料,我收到一条消息,用户“mercurial”的访问被拒绝


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

Mercurial与Subversion不同,它不允许对单个文件进行控制,这是有充分理由的。DVCS模型将整个repo放在每个开发人员的机器上,因此即使您将文件限制为push-and-pull,用户仍然可以通过
hg-cat
文件来获取其内容

我不会在客户端尝试这样做,而是根据谁需要什么来打破您的回购协议,并为单个回购协议设置权限。在堆栈交换上查看我的答案。您可以通过http(s)或SSH设置权限,或者,如果您碰巧正在使用Kill,则可以通过我们的权限界面设置权限。

我有一个解决方案:

将回购转换为吉特:


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


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

谢谢您的重播,但现在我不知道该怎么办。我有一个项目,我想限制特定用户对该项目中某些文件的访问。有没有什么不同的方法来做到这一点,并保持该项目在一个和平?什么类型的文件,你限制访问?你打算如何强制他们使用你的钩子?再次感谢你的回答。我想限制对一些php脚本的访问。但有一个问题与你的第二个问题相同。如何强制使用我的钩子,以及如何设计钩子,以便能够识别我想要限制的文件?在我的自定义钩子中是否有可以识别pull命令的mercurial变量?据我所知,没有办法阻止只提取某些文件,而允许其他文件。这将代表一个不同的历史,这将意味着不同的变更集ID,等等。它看起来确实像一个
预输出
钩子可能会在那里得到钩子,但是如果你能阻止某些文件,我会感到惊讶。你介意发布钩子的源代码吗?Danilo想要的是“通过文件路径进行部分克隆”,这在git中也是不可能的:在git中也是可能的: