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目录访问规则_Mercurial_Access Control - Fatal编程技术网

Mercurial目录访问规则

Mercurial目录访问规则,mercurial,access-control,Mercurial,Access Control,我有一个mercurial存储库,其目录结构如下: / /system /applications /applications/client1 /applications/client2 /applications/client3 我通过http(还没有ssl)在apache子域上为repo提供服务,当然,我想限制对推、拉和提交的访问。一般来说,我不希望一些用户看到的目录在所有,也不是目录的历史 是否有机会限制对mercurial存储库中目录的访问 在基于linux的系统上,如何仅为clien

我有一个mercurial存储库,其目录结构如下:

/
/system
/applications
/applications/client1
/applications/client2
/applications/client3
我通过http(还没有ssl)在apache子域上为repo提供服务,当然,我想限制对推、拉和提交的访问。一般来说,我不希望一些用户看到的目录在所有,也不是目录的历史

  • 是否有机会限制对mercurial存储库中目录的访问
  • 在基于linux的系统上,如何仅为client1和client2授予对client 1文件夹和client2文件夹的访问权限注意:如果没有必要,我不想将存储库拆分为子存储库
  • 如果没有子存储库,这不起作用,请有人告诉我如何使用子存储库(在本例中是使用我的目录结构)
    我迷路了:(

    既然你的所有东西都在一个存储库中,那么就没有了

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


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

  • 它可以限制对存储库的访问
  • 它可以使用钩子来防止推送用户不允许修改的内容
  • 第一种类型将使整个存储库只读或不可用。但是,如果用户具有读取权限,他将能够克隆并查看整个存储库、历史记录和文件

    但是,您可以通过禁止推送来阻止该用户修改中心副本。这意味着该用户可以使用自己的私有克隆执行任何他想执行的操作,但他将无法将这些更改推送回中心克隆

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

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

    换句话说,用户可以修改他的私有克隆,包括“client2”中的更改,但是如果他提交了一个带有“client2”更改的更改集,他将无法推回中央存储库。然后,他将不得不剥离或以其他方式除去这些更改集,然后才能执行推送操作

    因此,总结一下:

  • 您可以完全禁止用户克隆,这将使整个存储库对他不可用
  • 您可以禁止推送,但允许克隆
  • 您可以使用钩子来分析传入的变更集,并防止对用户不允许修改的内容进行更改
  • 无论如何,如果用户能够进行克隆,则该克隆在用户计算机上始终是完整且不受限制的。您无法限制对该克隆的访问,您所能做的只是第1点,首先禁止用户进行克隆
  • 您可以使用现在默认情况下随Mercurial一起分发的。扩展可以限制每个目录的所有Hg操作,而无需使用子存储库


    此外,您可以限制对每个分支或每个文件夹的访问。

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