如何配置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?
我只是不希望图形设计师能够访问源代码文件。
答案 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
”将是唯一允许克隆的分支,并且不包含任何未经授权的文件的历史记录。