对Monorepo中目录的细粒度访问

时间:2019-01-28 19:17:08

标签: git access-control monorepo

我一直在阅读monorepos的优点,但尚未发现以下问题的缓解方法:

比方说,一个组织有一个用于客户端/服务器Web应用程序的monorepo。他们雇用承包商来设计客户的某些部分。他们如何让承包商仅访问相关的客户代码?甚至sparse checkouts也不是小事。

3 个答案:

答案 0 :(得分:3)

考虑使用git subtree

使用git subtree,您将能够:

  • 创建一个由子树组成的monorepo,每个子树都可以链接到单独的远程仓库。

    在您的示例用例中,仅向承包商授予访问绑定到monorepo单个子树的远程repo的权限。

  • 具有单一的汇总/统一历史记录(monorepo点)

  • 从子树远程更改为monorepo

  • 将在monorepo的任何子树中进行的更改推送到其单独的远程

  • 保持简单/轻松的工作流。

    git subtree不需要您存储库的用户学习任何新知识。他们可以忽略您正在使用git subtree来管理依赖项的事实。”

有关优点/缺点的列表,请查看Atlassian的Git subtree: the alternative to Git submodule。尽管我认为本文中的示例步骤相当局限,但即使不是过时的。

要逐步进行演示,并在每个步骤中提供git log详细信息

  • Merging multiple repositories into a monorepo, while preserving history, using git subtree中的示例和步骤比Atlassian文章更简洁,更合理。
  • git subtrees: a tutorial还包括逐步操作和结果,以在monorepo中进行更改并推送到子树repo,反之亦然,并提供了一些不错的技巧。它确实提到了一个警告,那就是包含子树拉取的重设基础不起作用。另一篇文章解释了

    不要试图以此为基础。按原样推。如果您重新设置基础,则在执行下一个子树提取操作时,git子树将无法协调提交。

    如果必须重新设置基准,我在下面链接的Atlassian后续文章提供了一种解决方法。

  • 我通常不喜欢看视频,但是Introduction to Git Subtrees 值得一看,并且有很多细节。而且它比其他所有文章都更新得多(2019)。提前查看要处理的内容令人感到欣慰。

如果您想深入了解

monorepo-operator是一个使 易于管理的工具。我没有使用过它,也无法担保它,但是可能值得一试。

答案 1 :(得分:1)

  

他们如何让承包商仅访问相关的客户代码?

他们没有。完整的monorepo的机密性问题太重要了,无法缓解。
而且Git本身有no authorization (or authentication for that matter)
意思是:仅凭自身的本地Git功能(子模块或子树)数量就不够。

我通常会看到一个中间门仓库,该仓库由承包商工作的相关部分组成,并具有导入/导出工作的同步过程。
而且,如果该承包商正在远程工作,那么该摘录将托管在单独的服务器上,该服务器本身由DMZ管理,并复制到Internet上的外部服务器,可以通过VPN访问?

答案 2 :(得分:0)

我不确定monorepo,并且我知道这打破了monorepo问题,但是我能想到的一种方法是构建项目(如果可能)以支持模块并使用git子模块https://git-scm.com/book/en/v2/Git-Tools-Submodules

具有git提供程序的访问控制,例如Gitlab,Bitbucket等,您只能向承包商授予对特定git子模块的访问权限,无论其是读/写还是管理员访问权限。

例如,在您的情况下,您可以仅放置设计层(与客户端共享在另一个存储库中的设计层,并将其作为主存储库的子模块),如果您想要更严格的安全性(如@VonC所述),则可以为您的子模块设置VPN访问的存储库。设置可能会花费一些时间,但是我认为,一旦考虑到风险正确实施,这是值得的。