Mono-Repo vs Multi-Repo:揭示代码仓库策略的亮点
Mono-repo和Multi-repo是通过Git进行代码托管和管理的两种主要策略。我们详细讨论了这两种策略以及它们的利弊。
介绍
大多数现代项目都是在Git上进行管理和托管的。Git已成为分布式源代码管理、链接和全球范围内协作的标准平台。Git快速高效。托管和管理Git代码有两种主要方法:
- Mono-repo
- Multi-repo
在深入研究这些方法之前,让我们先了解一下repo的工作原理。
什么是仓库(Repo)?
仓库(Repo)包含了项目的所有文件和文件夹。它还包含有关用户、人员和计算机的信息。
仓库数据是版本控制的。一个仓库可以由个人或一组团队成员拥有。
Git是一个仓库。它可以是公共的、私有的或内部的。它具有用户界面。
Git提供版本控制和代码共享功能,然而,使Git与众不同的是,如果开发人员想对他们的文件进行一些更改,他们可以将整个仓库复制到他们的本地系统。即使开发人员没有对某个项目的写权限,他们也可以将内容本地复制并修改它们(称为forking)。
此外,如果开发人员想要共享本地的更改,他们可以向项目所有者发送一个“pull请求”。
一个项目可以有一个单一的服务。如果您的项目有多个工作流程,您可以为每个工作流程创建多个服务。大多数开发人员喜欢将大型项目拆分为较小的独立服务,每个服务可以有一个或多个功能。每个服务可以解决各种业务问题。随着函数即服务(Function-as-a-Service)的普及,用户可以访问各种功能作为服务。
一旦您创建了这些函数作为服务并部署它们,下一步就是对它们进行结构化和版本控制 – 您可以将所有服务放在一个仓库(Mono-repo)中 – 或者为每个服务创建一个单独的仓库(Multi-repo)!
什么是Mono-repo?
在Mono-repo方法中,您可以将所有服务放在一个单一(Mono)仓库中。您仍然可以独立地部署和管理每个服务。这些服务可以共享公共库和代码。
Facebook、Google和Dropbox等公司使用Mono-repo。
Mono-repo的优点
Mono-repo方法有许多优点:
- 一个地方存储所有项目代码,每个团队成员都可以访问
- 易于重用和共享代码,与团队协作
- 易于理解您对整个项目的更改影响
- 对于代码重构和大规模代码更改而言是最佳选择
- 团队成员可以全面了解整个项目
- 易于管理依赖关系
Mono-repo的缺点
当然,Mono-repo也有一些缺点,最主要的是性能问题。如果您的项目不断增长,每天都添加更多文件,那么检出、拉取和其他操作可能会变慢,文件搜索可能会更长。
此外,如果您为项目雇佣了许多外部开发人员,让他们访问整个代码库可能不太安全。
此外,由于许多人可以提交他们的更改,因此很难实施持续部署(Continuous Deployments,CD),您的持续集成(Continuous Integration,CI)系统可能需要进行多次重构。
使用Mono-repo的大公司会使用定制工具来处理扩展问题。例如,Facebook使用了自定义文件系统和源代码控制。
什么是Multi-repo?
在多仓库方法中,有多个仓库托管了一个项目的多个库和服务。如果一个服务发生了变化,开发人员只需要重新构建该服务而不是整个项目。个人和团队可以独立地开发他们所需的服务。
像Netflix和Amazon等公司使用multi-repos。
多仓库的优势
采用多仓库的公司数量远远超过采用单仓库的公司,这是因为以下原因:
- 每个服务和库都有自己的版本控制
- 代码的检出和拉取都很小且独立,因此即使项目规模增长,也不会出现性能问题
- 团队可以独立工作,无需访问整个代码库
- 开发速度更快,具有灵活性
- 每个服务可以单独发布和具有自己的部署周期,从而更容易实施CI和CD
- 更好的访问控制 – 所有团队不需要对所有库具有完全访问权限 – 但如果需要,可以获取读取权限
多仓库的缺点
- 跨服务和项目使用的依赖项和库必须定期同步以获取最新版本
- 在某些时候会鼓励孤立的文化,导致重复的代码和各个团队试图解决同样的问题
- 每个团队可能会遵循不同的最佳实践,导致难以遵循共同的最佳实践
单仓库和多仓库的区别
让我们回顾一下单仓库和多仓库之间的区别:
单仓库 | 多仓库 |
一个组织的所有项目的代码都存储在一个中央仓库中 | 每个服务和项目都有一个单独的仓库 |
团队可以协作工作,可以看到彼此的更改 | 团队可以自主工作,个人的更改不会影响其他团队或项目的更改 |
每个人都可以访问整个项目结构 | 管理员可以限制对开发人员需要访问的项目或服务的访问控制 |
如果项目规模不断增长,可能会出现扩展问题 | 性能良好,因为代码量有限,服务单位较小 |
难以实施持续部署(CD)和持续集成(CI) | 开发人员可以轻松实现CD和CI,因为他们可以独立构建服务 |
开发人员可以轻松共享库、API和其他共享代码,因为它们在中央仓库中被更新 | 应定期同步对库和其他共享代码的任何更改,以避免后续问题 |
结论
单仓库和多仓库同样受欢迎,哪种方法更好取决于项目的规模、需求以及所需的版本控制和访问控制级别。
单一代码库偏重于一致性,而多个代码库则侧重于解耦。在单一代码库中,整个团队可以看到一个人所做的更改,而多个代码库为每个团队创建了一个单独的代码库,他们只能访问所需的服务。如果您希望在项目中同时使用单一代码库和多个代码库的组合,您可以选择使用meta,这是一个管理多个项目和库的工具。
您可能还对Free Resources to Learn Git感兴趣。