我必须部署一个 Git 存储库,其中多个开发团队将在独立的代码块中一起工作。我们有一个主要的内部集成团队,可以访问每个人的所有内容。但是,一些第三方开发人员应该无法访问我们公司的顶级数据和代码。
众所周知,这个工作流程很难在纯 git 中实现,因为 git 假设项目中的每个人都可以共同访问存储库,在任何情况下都可以使用克隆命令访问整个存储库。根据构造及其分布式特性,git 的最低用户权限是只读访问权限。
互联网上推荐了几种方法来解决这个问题,特别是使用子模块,将每个团队分隔在单独的存储库下。然而,像子模块、子树和子存储库项目这样的解决方案都会带来一些不可取的集成和管理复杂性。事实上,使用 git 功能的子模块作为访问控制系统似乎是一种误用。
经过研究,我得出结论,Gitolite 可以成为实现我想要的目标的可行工具。 Gitolite有一个特点叫部分复制根据一组用户的规则集拒绝特定分支的访问。如果您定义用户“bob”仅对主项目“foo”的“partialCopy”下的“unstable”分支具有 RW+ 访问权限,则集成商开发人员“john”可以将机密代码推送给主项目,而无需担心“鲍勃”正在读它。实际上,“bob”甚至不知道 master 分支下的文件存在。
然而,Gitolite 是一种准系统方法,需要对存储库、用户密钥和权限文件进行低级别管理。
考虑到这一切:是否有类似的事情部分复制是否有任何最好的 git 套件解决方案(如 GitHub、GitLab、Bitbucket、CodeCommit 等)下的功能?
目标是部署一个 git 套件,为非技术经理提供更好的存储库管理、云支持、工具集成和 GUI 访问,并具有与 Gitolite 中相同的细粒度访问控制。
将它们分成单独的存储库可能是适合您情况的唯一可行选择。
部分复制似乎仅适用于分支。为了让它为您工作,您需要删除独立分支中已经存在的受保护代码,这将导致更严重的集成问题。要在不授予对原始文件的访问权限的情况下执行此操作,您需要创建一个无基础的分支,因为分支被定义为给定的提交,并且可以从该提交访问所有提交。
创建无基础分支会带来额外的问题,即在没有共同祖先的情况下进行合并,并且无法轻松共享对不同分支中所做的公共文件的更改,而无需合并到旨在隔离的代码中。在从其他系统进行迁移时,我对无基础分支的使用经验有限,所以我什至不确定它将如何处理主线中从隔离线中丢失的如此多的文件。
从逻辑上讲,这与在单独的存储库中实现子模块相同,只是使用第三方工具进行访问,因此它将带来相同的集成和管理开销(如果不是与 git 的本机设计背道而驰的话)。
解决您的一些担忧,子模块并不像许多人想象的那么糟糕,它们只是有点尴尬,直到您习惯它们为止。
如果这不是首选。如果有很多共享组件,那么使用包和包管理器也是一个不错的选择。如果您使用编译语言工作,并且以只读方式访问解释语言中的代码,那么人们就可以访问该功能,而不必授予他们访问代码的权限。 (我已经在几个非常大的项目中使用过它。)
使用多个存储库进行访问控制只是在许多非常大的项目(例如内核)中使用的中尉/仁慈的独裁者模型的稍微更正式的版本。这也使您的存储库变得轻便且易于管理。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)