我们正在将一个中等规模的项目从旧的SCMS(CMVC)迁移到Git / Gerrit。出于外部审计的目的,我们通过定义18"组件来实现CMVC内的严格访问控制。然后为每个组件创建ACL。因此,项目在CMVC中作为大型源代码树(具有许多子目录等)存在,但给定的开发人员可能只对一个特定子树具有提交访问权限。
[请注意我们的'组件'不是独立的,独立的应用程序或罐子或库......他们只是具有满足外部代码审计所需的特定ACL的代码子树]
我不清楚如何在Gerrit中实现相同级别的访问控制,除非我将每个CMVC组件转换为具有自己定义的访问组的单独Git项目/存储库。
创建18个独立项目的前景令人担忧......
a)因为组件失去同步的风险(请记住,我们的组件不是独立的应用程序或库),
b)跨越组件
的已提交更改所需的Gerrit授权代码审核的数量此外,考虑到我们的持续集成内容如何识别和撤消涉及多个存储库的错误提交会导致我脖子后面的头发站起来。
使用Gerrit实现细粒度访问控制是否有更好的方法?
答案 0 :(得分:3)
这里的一个关键问题是Git本身并没有任何机制只能在存储库中的特定目录上运行:它几乎是全有或全无。特定提交可以跨越多个目录,并且无法检索(或存储)“部分”提交。
您可以实现拒绝尝试修改某些子树的提交的过滤器,但是您无法限制对这些子树的拉取访问权限。
Git中的访问控制通常是按存储库和每个分支实现的。
如果您需要某种细粒度访问控制,您已经描述了和将项目拆分为多个存储库不是一个选项,您可能需要调查Git的替代方案以进行版本控制。