gitolite:允许仅更改选定文件

6
如何配置git和gitolite,允许特定用户仅更改特定目录中的文件?例如,原始主分支中的文件:
/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中是否存在任何针对特定目录的指令?或者我应该为这个用户配置一个新分支来进行git操作?

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

1个回答

4

2010年:对于Gitolite 2(可能已更改为Gitolite 3)

不行(需要创建具有正确内容的专用分支)。

正如gitolite的作者所说

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

到目前为止,我还没有看到需要将只读访问限制为存储库的某些部分的情况(无论如何,git都做不到这一点)。

[好吧,稀疏检出也许有所帮助,但无论如何都不容易)

写入访问通常需要受到限制,而gitolite可以让您限制:

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

请参见“安全、访问控制和审计”部分,这里是一个写入访问的示例:

conf/example.conf文件包含了所有详细的语法:

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' 将是唯一允许克隆的分支,并且不包含任何非授权文件的历史记录。

谢谢您提供这么详细的答案。那么,我该如何创建一个仅包含选定文件的新分支,并删除以前的提交,以便平面设计师无法访问它们,在克隆后只能看到选定的文件呢? - takeshin
@takeshin:在历史记录的某个时间点创建“graph_designer”分支,然后,例如,您可以直接将正确的文件复制到其中并提交它们(意思是:对于这些文件没有过去的历史记录,但它们可能从一开始就不需要那些历史记录)。该“graph_designer”将是唯一允许克隆的分支,并且不会包含任何未经授权的文件历史记录。 - VonC
请注意,这对于 gitolite v3 不再有效。 - jan

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