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

是否有任何 per-dir 指令,gitolite.conf或者我应该为这个用户配置新分支的 git 吗?

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

4

1 回答 1

4

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

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

正如gitolite 的作者自己所说

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

到目前为止,我还没有看到需要将读取访问权限限制为 repo 的情况(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' 将是唯一允许克隆的分支,并且不会包含任何具有非授权文件的历史记录。

于 2010-07-08T15:23:18.900 回答