正在将项目迁移到 Git/Gerrit。访问控制问题?

Migrating project to Git/Gerrit. Access control questions?

我们正在将一个中等规模的项目从旧的 SCMS (CMVC) 迁移到 Git/Gerrit。出于外部审计目的,我们通过定义 18 "components" 然后为每个组件创建 ACL,在 CMVC 中实施了严格的访问控制。因此,该项目在 CMVC 中作为一个大型源代码树(具有许多子目录等)存在,但给定的开发人员可能只有一个特定子树的提交访问权限。

[请注意,我们的 'components' 不是独立的、独立的应用程序或 jar 或库...它们只是具有满足外部代码审计所需的特定 ACL 的代码子树]

我不清楚如何在 Gerrit 中实现相同级别的访问控制,除非我将每个 CMVC 组件转换为单独的 Git project/repository 并具有自己定义的一组访问组。

创建 18 个独立项目的前景令人担忧...

a) 因为组件不同步的风险(请记住,我们的组件不是独立的应用程序或库),并且,

b) 提交跨组件的更改所需的 Gerrit 授权代码审查次数

此外,一想到我们的持续集成工作将如何识别和撤消涉及多个存储库的错误提交,我的后颈就毛骨悚然。

有没有更好的方法用Gerrit实现细粒度的访问控制?

这里的一个关键问题是 Git 本身并没有任何机制来仅对存储库中的特定目录进行操作:它几乎是全有或全无。一个特定的提交可以跨越多个目录,并且无法检索(或存储)一个 "partial" 提交。

您可以实施过滤器来拒绝试图修改某些子树的提交,但您无法限制对这些子树的拉取访问。

Git 中的访问控制通常针对每个存储库和每个分支实施。

如果您需要您描述的那种精细访问控制 并且 将项目拆分为多个存储库不是一种选择,您可能需要研究 Git 用于版本控制。