根据用户名限制读取和写入访问普通git存储库的分支
问题描述:
我们正在构建一个评估过程,并希望限制特定用户对特定分支的读写访问权限。根据用户名限制读取和写入访问普通git存储库的分支
有“普通”用户对所有内容具有读写访问权限(这些用户将对答案进行评分),并且将会有给定数量的评估用户应该只具有读访问权限和读/写权限包含其名称的分行(例如assessment-john.doe
)。我们的评估中心将有一个包含500个用户和密码的列表,并将为每个候选人提供来自该列表的一组凭证。
短版:我想配置git的,即:
- 普通用户(如
tobi
,chris
)有:- 读&写访问掌握
- (理想只)读访问分支开始
assessment-
- 作为sessment用户(例如
assessment-1
,assessment-2
)具有:- 读访问掌握
- 到具有相同 名称作为用户分支读/写访问(例如
assessment-1
) - 到其他分支没有访问。
我们要使用纯git的(和ssh)没有像gitlab或github上的犯规需要此任务的任何版本控制GUI服务器。
编辑:要说清楚:读写控制更重要的是写控制。 (除了主人)。
答
您无法通过git的内置功能满足这些要求。访问控制留给主机环境。
您可以伪造某种级别的写入权限(通过使用签名提交和挂钩来拒绝违反授权规则的推送),但可能不完全符合您的要求;而有限的阅读权限是正确的;你基本上必须使用单独的回购。
您可以编写自己的服务器来执行访问控制,也可以使用现有的服务器;但是你对现有主机软件的描述(暗示它的主要功能是提供一个GUI)是错误的;并且你的断言你的任务不需要一个是不正确的,因为访问控制是任务的一部分。
答
我现在已经完成:
- 克隆一个*存储库
- 条除主任何分支机构
- 重命名大师与分支名用户
- 副本存储库中的一些挂钩
- 给出正确的用户读取存储库的访问权
- 将用户添加到允许运行特定s的组通过sudo CRIPT作为另一个用户
- 写推动分支到*存储库的用户的一推,它的存储库
任务*不*需要某种应用程序的管理权限,因为挂钩'git'本身并不知道任何有关“用户”或“访问控制”的内容。像Gitlab这样的工具可以完全解决你的问题,如果你不喜欢它,除了用它来管理SSH密钥,你甚至不需要与Web UI进行交互。 – larsks
但是,如果你想开发自己的解决方案,很久以前我写了答案[这里](https://*.com/a/28402532/147356)和[这里](https://*.com/a/8248062/147356)和[这里](https://*.com/a/40454688/147356)处理类似的问题。 – larsks
我们在我们公司使用gitlab enterprise,我认为这些分支保护是企业功能的一部分。但通过我们的企业gitlab运行几百名评估候选人需要大量用于企业服务器的用户许可证。我也不想设置ssh密钥。我想尽可能让用户尽可能简单,但代码不应公开,其他人可以复制它的解决方案。 – Tobi