gitolite:允许仅更改选定的文件

时间:2010-07-08 14:55:08

标签: git gitolite

如何配置git和gitolite以允许特定用户只更改特定目录中的文件?

e.g。原始主分支中的文件:

/dir1/
/dir2/file1
/dir2/file2
/dir3/file1

用户kathrine,仅允许更改/dir2/file1/dir2/file2

$kathrine: git clone git@example.com:test.git

结果:

/dir2/file1
/dir2/file2

gitolite.conf中是否有per-dir指令,或者我是否应该为此用户配置git with new branch?

我只是不希望图形设计师能够访问源代码文件。

1 个答案:

答案 0 :(得分:4)

2010:对于Gitolite 2(可能已经改变了gitolite 3)

否(意味着需要创建具有正确内容的专用分支)。

作为author of gitolite himself put it

  

我是一个名为gitolite的项目的作者,该项目在中央服务器上为多个git存储库提供了出色的分支级访问控制。   我的目标“市场”恰恰是git的企业用户。

     

到目前为止,我还没有看到读取访问需要限制为回购的部分的情况(git无论如何都不能这样做)。

[好sparse checkout可能有所帮助,但无论如何都不容易)

  

通常需要限制写访问权限,并且gitolite可以限制:

     
      
  • 都是通过分支名称(例如,只有QA主管可以将提交系列推送到“QA-done”分支)
  •   
  • 或按文件名(例如,只有团队负责人可以更改src/very-important-and-critical-module中的Makefile和文件。
  •   

请参阅“security, access control, and auditing”部分,以下是访问的示例:

conf/example.conf file具有所有详细语法:

repo foo
        RW+ = lead_dev # rule 1
        RW = dev1 dev2 dev3 dev4 # rule 2

        RW NAME/ = lead_dev # rule 3
        RW NAME/doc/ = dev1 dev2 # rule 4
        RW NAME/src/ = dev1 dev2 dev3 dev4 # rule 5
  

根据这些规则检查被推送的提交所触及的每个文件。

     
      
  • lead_dev可以将更改推送到任何文件,
  •   
  • dev1 / 2可以将更改推送到“doc/”和“src/”(但不是顶级README),
  •   
  • 和dev3 / 4只能将更改推送到“src/”中的文件。
  •   

话虽如此,正如OP所说,这个棘手的问题仍然存在:

  

如何仅创建一些选定文件的新分支,并删除之前的提交,以便图形设计师无法访问它们,并且只能在克隆后看到所选的文件?

一般原则:

在历史记录中创建'graph_designer'分支,这些文件不存在

从那里,有两个选择:

  • 重新组织您当前的提交(git rebase --interactive),以便首先只拥有dir2个文件(然后提交影响任何其他目录)
  • 或者,如果第一个选项代表太多工作(或者因为那些提交已经被推送到其他回购中而无法实现),只需复制并在该新分支中添加相关文件。
    这意味着,这些文件没有过去的历史记录,但从一开始就可能不需要该历史记录。

graph_designer”将是唯一允许克隆的分支,并且不包含任何未经授权的文件的历史记录。