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