使用gitolite拒绝对特定仓库分支的读取

9
我希望实现以下目标: 同事在组@coworkers中, 客户在组@clients中。
Git仓库应该对所有人都可读写,但是应该有特殊的分支。 例如,我创建了一个名为“intern”的新分支,@coworkers应该具有RW+访问权限,但是客户不应该能够读取或写入。
我认为可以通过以下方式实现:
repo myrepo
    -    intern    = @clients
    RW+            = @clients @coworkers

但是这并不起作用。
3个回答

11
根据与gitolite作者的讨论,分支的读取访问限制不可能实现:

Gitolite的每个分支的功能仅适用于写访问。它无法用于读取访问,因为git本身不支持区分这一点。


限制读取权限在git中是不可能实现的,这是设计原则 - 当克隆存储库时,必须始终获取完整的存储库,没有任何绕过它的方法(除非从根本上改变git的操作方式)。 - sleske
1
现在,通过最新版本的gitolite的partial-copy功能,这是可能的。请查看下面的答案。 - leszek.hanusz

4
现在,使用gitolite的最新版本v3.x的partial-copy feature功能,可以限制对gitolite分支的读取访问权限。
  1. 请确保使用最新的gitolite版本
  2. 取消~/.gitolite.rc文件中ENABLE部分的partial-copy行的注释
  3. 在~/.gitolite.rc文件中设置$GIT_CONFIG_KEYS = '.*'
  4. 使用partial-copy选项创建另一个仓库,该仓库是原始仓库的副本,但没有某些分支。
例如:如果您只希望客户端访问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存储库的部署分支:
git clone -b deploy git@your-server:my-repo-deploy

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接