Git 部分复制访问控制

标签 git access-control gitolite

我必须部署一个 Git 存储库,多个开发团队将在其中以独立的代码块协同工作。我们有一个主要的内部集成团队,可以访问每个人的所有内容。但是,某些第三方开发人员应该无法访问我们公司的顶级数据和代码。

众所周知,此工作流很难在纯 git 中实现,因为 git 假定项目中的每个人都可以访问存储库,在任何情况下都可以使用克隆命令访问整个存储库。根据构造及其分布式特性,git 的最低用户权限是只读访问权限。

互联网上推荐了几种方法来解决这个问题,特别是使用子模块,将每个团队分开在一个单独的存储库下。然而,子模块、子树和 subrepos 项目等解决方案都带来了一些不可取的集成和管理复杂性。事实上,使用 git 功能,如访问控制系统的子模块似乎是一种误用。

经过研究,我得出结论,Gitolite 可以成为实现我想要的目标的可行工具。 Gitolite 有一个称为部分复制 的功能,它根据一组用户的规则集拒绝特定分支的访问。如果您定义用户“bob”将仅对主项目“foo”的“partialCopy”下的分支“unstable”具有 RW+ 访问权限,那么集成开发人员“john”可以将 secret 代码推送给主控而不用担心'鲍勃'读它。实际上,'bob' 甚至不知道 master 分支下的文件存在。

但是,Gitolite 是一种准系统,需要对存储库、用户 key 和权限文件进行低级别管理。

考虑到所有这些:在任何最好的 git 套件解决方案(如 GitHub、GitLab、Bitbucket、CodeCommit 等)下,是否有类似于部分复制 功能的功能?

目标是部署一个 git 套件,为非技术经理提供更好的存储库管理、云支持、工具集成和 GUI 访问,以及 Gitolite 中相同的细粒度访问控制。

最佳答案

将它们分解成单独的存储库可能是适合您的情况的唯一可行选择。

部分复制似乎只适用于分支机构。为了让它为您工作,您需要从您的隔离分支中删除已经存在的 protected 代码,这将导致更严重的集成问题。要在不授予对原始文件的访问权限的情况下执行此操作,您需要创建一个无基础分支,因为一个分支被定义为给定的提交,并且所有提交都可以从该提交访问。

创建无基础分支会引入额外的问题,即在没有共同祖先的情况下进行 merge ,并且无法轻松共享对不同分支中所做的公共(public)文件的更改,而无需 merge 旨在隔离的代码。在从其他系统迁移时,我使用无基础分支的经验有限,所以我什至不确定它如何处理主线中的这么多文件从隔离线中丢失。

从逻辑上讲,这与在单独的存储库中实现子模块是一样的,只是使用第三方工具进行访问,因此它会带来相同的集成和管理开销(如果不是与 git 的原生设计背道而驰的话) .

解决您的一些顾虑,子模块并不像许多人想象的那么糟糕,它们只是在您习惯之前有点尴尬。

如果这不是首选。如果有很多共享组件,使用包和包管理器也是一个不错的选择。如果您使用编译语言工作,那么这使人们可以访问功能,而不必让他们访问代码,而以只读方式访问解释语言的代码。 (我已经在几个非常大的项目中使用过它。)

使用多个存储库进行访问控制只是在许多非常大的项目(如内核)中使用的中尉/仁慈独裁者模型的稍微正式的版本。这也使您的存储库轻便且易于管理。

关于Git 部分复制访问控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48301882/

相关文章:

spring - 如何使用 Spring 安全性和 Spring 安全性对象中的属性限制对 URL 的访问?

ubuntu - 服务器意外关闭网络连接gitlab和gitolite

git - 一台机器上有多个 gitolite 用户

git - go get 不行,我有 git

git - git - 错误 : bad signature without losing (non-committed) data 有什么解决方案

Git GUI 类似于 MS Windows 中的 HG Workbench

security - 我需要哪些 MongoDB 用户权限才能将用户添加到新的/另一个 mongo 数据库?

authorization - 使用社交身份验证限制访问静态网站的最简单方法是什么

git/gitolite : moving repos after setting up gitolite

git push origin HEAD :ref/for/master creates a new commit everytime instead of amending previous changes