Git 部分复制访问控制

2023-12-02

我必须部署一个 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(使用前将#替换为@)

Git 部分复制访问控制 的相关文章

随机推荐

  • 如何将扩展运算符与“this”一起使用?

    我正在 TypeScript 中定义一个类 因此 使用展开运算符 我可以发出这样的命令 class Foo constructor data IDataStructure const k data and then k has taken
  • 如何获取小时时间?

    我正在编写 python 脚本以获得 12 小时的时间 我想要得到7小时而不是07 self getControl 4203 setLabel time strftime I 30 time strftime p print time st
  • Oracle 中的复杂左外连接,转换为 PostgreSQL

    我有一个来自 Oracle SAS 环境的巨大 SQL 语句 我明白了大部分内容 但最让我困惑的是 WHERE 子句中的左外连接 加号 我需要将其转换为 Postgres 我可以处理代码的第一部分 这是让我困惑的连接 SELECT A bu
  • 如何将项目左对齐同时将它们保留在一列中?

    我试图将项目左对齐 同时将它们保留在列中 但是 当我将项目放入列中时 它默认将页面上的项目重新居中 这是我所拥有的 HTML div div post title div div post author div div CSS postHe
  • Ionic 2 Facebook 登录 - “应用程序未设置”和“未登录”和“不允许给定 URL”错误

    我正在尝试从 Ionic Native 库实现 Facebook 登录 API 并在我的应用程序中有一个用于打开 Facebook 登录窗口的按钮 但是 当该窗口在我的 iOS 设备上打开时 首先出现以下错误 然后 在终端中执行以下命令后
  • 嵌套元组列表的高级排序标准

    我有一个以下形式的嵌套元组列表 a b c 现在我想选择最大化的元素a同时最小化b and c同时 例如在 7 5 1 7 4 1 6 3 1 获胜者应该是 7 4 1 任何帮助表示赞赏 根据我的理解 您希望按 a 降序排序 按 b 升序排
  • 只删除c#上的一些html标签

    我有一个字符串 string hmtl div b xpto b div 并需要删除标签 div and div 结果是 b xpto b Just div and div 没有去掉很多html标签 而是保存了 b xpto b Use h
  • 在 Windows Phone 8.1 上使用 Sharepoint REST API 时,HttpClient 无法通过 NTLM 对第二个请求进行身份验证

    很抱歉标题很长 但这似乎是迄今为止我所知道的最好的总结 我们目前正在开发一个通用应用程序 该应用程序需要使用 NTLM 身份验证通过 REST API 访问 Sharepoint 服务器上的一些文档 事实证明这比应有的要困难 虽然我们能够找
  • React Native adb 反向 ENOENT

    我正在尝试使用 React NativeAndroid V4 2 2 Genymotion 但我无法在模拟器上测试该应用程序 当我跑的时候react native run android 我收到此错误Could not run adb re
  • 涉及数值 (0) 的加法

    假设 x 是实数或向量 i 的值为 False 那么 x i 将返回 numeric 0 我想将其视为实数 0 或整数 0 它们都适合加法 numeric 0 添加到任何实数将返回 numeric 0 而我希望获得添加的实数作为结果 如何转
  • 在struts2阿拉伯语国际化中如何自动将文本框中的光标更改为rtl?

    我已经在我的 Struts2 应用程序中实现了国际化 并且工作正常 但是当我选择阿拉伯语作为语言时 如何将所有 jsp 中的所有文本框中的光标位置自动更改为 RTL 如果你能给我一个简单的例子 那将会非常有帮助 添加怎么样dir归因于JSP
  • “UseTaskFriendlySynchronizationContext”是什么意思?

    asp net 4 5 中有一个新的应用程序设置
  • 加载可执行文件或执行库

    有一个large number of 问题关于如何执行库或动态加载可执行文件的SO 据我所知 所有答案都归结为 将可执行文件编译为位置无关代码并使用dlopen 这非常有效 并且在 macOS 上仍然有效 直到glibc 最近的变化 明确禁
  • 如何在oracle中显示用户的所有权限?

    有人可以告诉我如何在 sql 控制台中显示特定用户的所有权限 规则吗 您可以尝试以下这些视图 SELECT FROM USER SYS PRIVS SELECT FROM USER TAB PRIVS SELECT FROM USER RO
  • “,(?!.*\\))”在 R 中返回“无效的正则表达式”错误

    我有一个正在使用的字符串 我试图仅选择括号之外的逗号 以便我可以根据它拆分字符串 这是我正在使用的字符串 利文斯顿 布莱顿县 迪尔菲尔德县 热那亚县 哈特兰县 奥西奥拉县和蒂龙县 马科姆县 门罗县 奥克兰县 萨尼拉克县 圣克莱尔县和韦恩县
  • 如何在 3D hist python/matplotlib 中自定义轴

    我正在尝试使用 3D 条形图绘制此数据集 B A freq 1 2003 2 1 2003 2 2 2008 1 2 2007 2 2 2007 2 3 2004 1 1 2004 3 1 2004 3 1 2004 3 我已经在这里写了代
  • 需要使用 twitter bootstrap v3 的 div 之间的间距

    使用 twitter bootstrap v3 rc1 我的页面上有三个 sub content block div 带有 make column 4 应用于每一个 我尝试添加 make row 到包含所有三个子内容块 div 的 div
  • 确保 Spring 托管 bean 的单个实例

    我创建了一个 spring 方面来处理重试机制 我还创建了一个重试注释 以下是重试注释的代码以及处理该注释的方面 Retention RetentionPolicy RUNTIME Target ElementType METHOD pub
  • 如何将十六进制字符串 'o\xf2\x00\x00' 转换为 int32?

    当我用 python 代码读取前 4 个字节时 len fobj read 4 I got o xf2 x00 x00 这应该是一个int32 当我用其他工具读取文件时 matlab 例如 它给出62063 有人可以给我一些关于如何转换的提
  • Git 部分复制访问控制

    我必须部署一个 Git 存储库 其中多个开发团队将在独立的代码块中一起工作 我们有一个主要的内部集成团队 可以访问每个人的所有内容 但是 一些第三方开发人员应该无法访问我们公司的顶级数据和代码 众所周知 这个工作流程很难在纯 git 中实现