Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/23.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
使用gitolite拒绝读取特定存储库分支_Git_Acl_Gitolite - Fatal编程技术网

使用gitolite拒绝读取特定存储库分支

使用gitolite拒绝读取特定存储库分支,git,acl,gitolite,Git,Acl,Gitolite,我正在努力实现以下目标: 同事在@coworkers组中, 客户在@clients组中 Git回购协议应可供所有人阅读和书写,但应有专门的分支机构。 i、 e.我创建了一个新的分支机构“实习生”,并且@同事应具有RW+权限,但客户不应能够R或W 我想我可以通过 repo myrepo - intern = @clients RW+ = @clients @coworkers 但这不起作用。我不是gitolite专家,但我认为规则是按顺序处理的。

我正在努力实现以下目标: 同事在@coworkers组中, 客户在@clients组中

Git回购协议应可供所有人阅读和书写,但应有专门的分支机构。 i、 e.我创建了一个新的分支机构“实习生”,并且@同事应具有RW+权限,但客户不应能够R或W

我想我可以通过

repo myrepo
    -    intern    = @clients
    RW+            = @clients @coworkers

但这不起作用。

我不是gitolite专家,但我认为规则是按顺序处理的。你试过简单地倒转最后两行吗?也就是说,首先向@clients和@coworkers授予权限,然后再拒绝@clients访问intern。

根据gitolite作者的一份报告,分支机构不可能有读访问限制:

Gitolite的每分支内容仅适用于写访问。信息技术 不适用于读访问,因为git本身不适用 支持作出这种区分


现在可以使用gitolite的最新版本gitolite v3.x限制对gitolite分支的读取访问

  • 确保使用最新的gitolite版本
  • 取消对~/.gitolite.rc文件的
    ENABLE
    部分副本行的注释
  • 在~/.gitolite.rc文件中设置
    $GIT\u CONFIG\u KEYS='.*'
  • 使用“部分复制”选项可以创建另一个存储库,该存储库是原始存储库的副本,但没有一些分支
  • 示例:如果您希望客户端只能访问
    deploy
    分支

    repo    my-repo
        RW+     =   @coworkers
    
    repo    my-repo-deploy
        RW  deploy  =   @clients
        -           =   @clients
    
        -   VREF/partial-copy           =   @all
        config gitolite.partialCopyOf   =   my-repo
    
    如果git抱怨无法删除主分支,可以在服务器上使用以下命令:

    sudo git config --system receive.denyDeleteCurrent warn
    sudo git config --global receive.denyDeleteCurrent warn
    
    客户端现在可以使用如下命令克隆my repo deploy存储库的deploy分支:

    git clone -b deploy git@your-server:my-repo-deploy
    

    在git中,按设计限制读取访问是不可能的——克隆时,您必须始终获取完整的存储库,这是无法避免的(如果不从根本上改变git的操作方式)。现在,通过gitolite最新版本的部分复制功能,这是可能的。检查下面我的答案。