git - GitHub monorepos 的精细读取访问权限
问题描述
我们将向数百名用户提出数百个编码挑战。每个用户都可以针对任意数量的挑战发布自己的解决方案,从而可能产生数千个挑战解决方案。创建数百或数千个单独的存储库似乎很笨拙,因此我们希望将整个项目保留在一个单一存储库下,并限制每个用户在每个文件或每个目录的基础上的读取访问。每个用户应该只能看到他们自己的文件,而 repo 的所有者应该能够看到所有文件。
一个示例 repo 结构如下所示:
challenges/
├── challenge1/
│ ├── challenge1-user1/
│ ├── challenge1-user2/
│ └── challenge1-user5/
│ ...
├── challenge2/
│ ├── challenge2-user2/
│ └── challenge2-user3/
│ ...
├── challenge3/
│ ├── challenge3-user1/
│ ├── challenge3-user3/
│ └── challenge3-user4/
│ ...
├── ...
...
如果其他人不得不处理类似的问题及其解决方案,也很感兴趣。
解决方案
您不能提供对 Git 存储库的这种受限访问。Git 命名空间的文档解释了原因:
获取和推送协议并非旨在防止一方从另一方存储库中窃取不打算共享的数据。如果您有需要保护的私有数据免受恶意对等方的侵害,最好的选择是将其存储在另一个存储库中。这适用于客户端和服务器。特别是,服务器上的命名空间对读访问控制无效;您应该只向您信任的客户端授予对命名空间的读取权限,这些客户端具有对整个存储库的读取权限。
如文档所述,如果您的数据需要具有不同的访问控制,则它需要存在于不同的存储库中。一个monorepo在这里是行不通的。
推荐阅读
- java - 接收两个自然数并计算其中一个出现在另一个中的次数。爪哇
- php - 如何从展开的自定义字段名称列表中删除最后一个逗号
- spring-boot - spring boot 微服务端到端测试,带有黄瓜和数据库验证
- java - 用高效的算法从数组中获取缺失的数字?‽?
- c++ - 如何使用 std::unique_ptr 作为类的静态映射
- vue.js - (Vue.js) 如何在 'Vue.js' 上使用 github 页面
- javascript - 我怎样才能使滚动锁定?
- android - sqlite 无法创建表
- c# - c# - vsftpd 和 FluentFTP - 如何使用 "Ftp.Gethash("FileName") 自动检查文件
- jquery - 程序化的 keydown 事件不会触发事件监听器