gitolite或gitosis:对存储库内的目录的权限

时间:2011-11-08 07:56:43

标签: git gitolite

例如:我有一个存储库 - 具有此类fs层次结构的repo1

repo1:
 js
 html
 php/core
 php/menu

我想向repo1:php/menu,RW许可 - 给自由职业者,但对于所有repo1 - 这个自由职业者必须只有只读权限。

我可以用gitolite或gitosis做这个或者可能是别的吗?

3 个答案:

答案 0 :(得分:6)

DVCS上的repo访问权限始终链接到所有repo,而不是if的一部分,主要是因为你克隆了所有shallow clone is hard)。

这意味着gitolite(我甚至不会提及过时的gitosis)可以对以下内容施加限制:

  • 访问所有回购
  • 只写某些分支(但你不能限制对某个分支的读访问权)

无法阻止用户访问回购的部分内容。

但是,自gitolite v3 or 'g3'(2012年4月17日)起,您可以VREF rules阻止writing (pushing to) certain directories(除了某些分支)。


原始答案(gitolite V2 or 'g2',2011年11月)

请参阅gitolite.conf -- by exampleside note: "R" permissions for refs

repo    gitolite-admin
        RW+                 =   sitaram
        # this is equivalent to:
        RW+     refs/.*     =   sitaram
  

Sitaram是唯一的管理员。他可以在gitolite-admin仓库中推送,创建,删除或回放任何分支或标签。

        R master    =   wally       # MEANINGLESS!  WILL NOT DO WHAT YOU THINK IT DOES!
  

这不起作用。
  您只能在回购级别限制“读取”访问权限,而不能限制在分支级别   这是一个git问题,而不是一个gitolite问题。打扰他们,或切换到gerrit。

答案 1 :(得分:0)

使用gitolite,你想做什么似乎是可能的。看看这个:http://sitaramc.github.com/gitolite/bac.html

读访问权限仅限于回购级别,但是这就是你想要的东西..

答案 2 :(得分:0)

第一个问题是git上下文中的“只读”和“读写”是什么意思。 git中的“写”包含两个独立的操作。 “commit”,它创建一个跨越整个树的修订(git根本没有任何每个文件的历史记录)和一个将该修订版本复制到中央存储库的“推送”。

除了您自己之外,没有办法限制任何人的“提交”,因为用户必须手动将任何挂钩安装到其工作存储库中。因此,有问题的用户将能够创建一个修改任何内容的提交。他们还可以通过发送补丁,捆绑或允许他们直接从工作存储库中提取来与团队中的其他成员共享该提交。

可以限制的是对中央存储库的“推送”。您可以创建updatepre-receive挂钩(它们仅在调用约定方面有所不同),它将检查修订的内容,如果它们触及您不想要的内容,则拒绝它们。 update挂钩接收3个参数,分支名称,旧提交和新提交,因此您只需git diff --name-status旧的和新的提交,如果给定用户(您将不得不查找如何获得该来自gitolite)正在进行推送,并且更改会影响您允许的子目录以外的其他目录,拒绝推送。

用户仍然可以创建影响树的其他部分的修订版,并通过让其他人推送它来将其放入主干。它可能有用,但您的同事需要意识到他们应该直接审查他们从顾问那里获得的变更。

请注意,检查提交作者或提交者是不安全的,因为作者可以自由设置。