Mono-Repo 与 Multi-Repo:代码存储策略的亮点
已发表: 2021-12-22Mono-repo 和 Multi-repo 是通过 Git 托管和管理代码的两种主要策略。 我们详细讨论了这些策略及其优缺点。
介绍
大多数现代项目都在 Git 上进行管理和托管。 Git 已成为在世界任何地方进行分布式源代码管理、版本控制和协作的标准平台。 Git 快速高效。 托管和管理 Git 代码有两种主要方法:
- 单一回购
- 多回购
在深入研究这些方法之前,让我们了解 repo 的工作原理。
什么是回购?
存储库 (Repo) 包含项目的所有文件夹和文件。 它还包含有关用户、人员和计算机的信息。
存储库数据受版本控制。 回购可以由个人或一组团队成员拥有。
Git 是一个存储库。 它可以是公共的、私有的或内部的。 GitHub 是 Git 存储库的托管服务,具有用户界面。
Git 提供版本控制和代码共享功能,然而,Git 的不同之处在于,如果开发人员想要对他们的文件进行一些更改,他们可以将整个存储库复制到他们的本地系统。 因此,即使开发人员没有对特定项目的写入权限,他们也可以在本地复制内容并对其进行修改(称为分叉)。
此外,如果开发人员想要共享本地所做的更改,他们可以向项目所有者发送“拉取请求”。
一个项目可以有一个服务。 如果您的项目有多个工作流,您可以为每个工作流创建多个服务。 大多数开发人员更喜欢将较大的项目拆分为具有一个或多个功能的较小的独立服务。 每个服务都可以解决各种业务问题。 随着无服务器框架的流行,用户可以将功能作为服务访问。
一旦您创建了这些功能即服务并部署它们,下一步就是对它们进行结构化和版本控制——您可以将所有服务放在一个存储库中(mono-repo)——或者为您拥有的每个服务拥有一个单独的存储库(多回购)!
什么是 Mono-repo?
在单一存储库方法中,您可以将所有服务保存在单个(单一)存储库中。 您仍然可以独立部署和管理每个服务。 这些服务可以共享公共库和代码。
Facebook、Google 和 Dropbox 等公司使用 mono-repo。
Mono-repo 的优势
Mono-repo 方法有很多优点:
- 一个存储所有项目代码的地方,团队中的每个人都可以访问
- 易于重用和共享代码,与团队协作
- 易于理解您的更改对整个项目的影响
- 代码重构和大量代码更改的最佳选择
- 团队成员可以全面了解整个项目
- 易于管理依赖项
Mono-repo 的缺点
当然,mono-repo 有一些缺点,主要是性能。 如果您的项目增长并且每隔一天添加更多文件,则签出、拉取和其他操作可能会变慢并且文件搜索可能需要更长的时间。
此外,如果您为您的项目雇用了很多独立承包商,那么让他们访问整个代码库可能并不那么安全。
此外,实施持续部署 (CD) 也很困难,因为很多人可以签入他们的更改,而您的持续集成 (CI) 系统可能必须进行多次重建。
使用单一存储库的大公司已经定制了工具来处理扩展问题。 例如,Facebook 使用自定义文件系统和源代码控制。

什么是多回购?
在多存储库方法中,有多个存储库托管项目的多个库和服务。 如果服务发生更改,开发人员只需重建该服务而不是整个项目。 个人和团队可以处理他们的特定服务,并且他们只能访问所需的服务。
Netflix 和 Amazon 等公司使用多存储库。
多回购的优势
采用多回购的公司数量远多于采用单一回购的公司,原因如下:
- 每个服务和库都有自己的版本控制
- 代码签出和拉取小而独立,因此即使项目规模增长也不存在性能问题
- 团队可以独立工作,无需访问整个代码库
- 更快的开发和灵活性
- 每个服务可以单独发布,有自己的部署周期,从而使 CI 和 CD 更容易实现
- 更好的访问控制——所有团队不需要拥有对所有库的完全访问权限——但如果需要,可以获得读取访问权限
多回购的缺点
- 跨服务和项目使用的依赖项和库必须定期同步以获取最新版本
- 在某些时候鼓励孤立的文化,导致重复的代码和单个团队试图解决相同的问题
- 每个团队可能会为其代码遵循一组不同的最佳实践,从而导致难以遵循常见的最佳实践
Mono 和 Multi Repo 的区别
让我们概括一下单回购和多回购之间的区别:
单一回购 | 多回购 |
一个组织的所有项目的所有代码都驻留在一个中央存储库中 | 每个服务和项目都有一个单独的存储库 |
团队可以协作和一起工作; 他们可以看到彼此的变化 | 团队可以自主工作; 个别更改不会影响其他团队或项目的更改 |
每个人都可以访问整个项目结构 | 管理员可以限制对开发人员需要访问的项目或服务的访问控制 |
如果项目规模不断增长,可能会出现放大问题 | 良好的性能,因为有限的代码和较小的服务单元 |
难以实施持续部署(CD)和持续集成(CI) | 开发者可以轻松实现CD和CI,因为他们可以独立构建服务 |
开发人员可以轻松共享库、API 和其他公共代码,因为它们在中央存储库中更新 | 对库和其他常见代码的任何更改都应定期同步以避免以后出现问题 |
结论
单存储库和多存储库都同样受欢迎,哪一个更好取决于您的项目规模、项目要求以及您需要的版本控制和访问控制级别。
Mono-repo 有利于一致性,而 multi-repo 侧重于解耦。 在单存储库中,整个团队可以看到一个人所做的更改,多存储库为每个团队创建一个单独的存储库,他们只能访问所需的服务。 如果你想在你的项目中结合使用 mono-repo 和 multi-repo,你可以选择 meta,一个管理多个项目和库的工具。
您可能还对学习 Git 的免费资源感兴趣。