获取多个回购并合并为一个回购(monorepo)

Taking multiple repos and merging into a single repo (monorepo)

作为项目经理,我想知道将多个回购合并为一个单一回购的潜在风险是什么?

我试过询问首席工程师可能会出现什么问题,但他们非常希望使用个人回购协议为 12 个团队完成此过渡,他们告诉我没有风险。

不适用

为了回答这个问题,我期待一份我们应该接受或减轻的合理风险清单:

示例:

风险 1:我们需要恢复到旧的回购协议但不能,因为旧的回购协议现在落后了。

风险 2:单个存储库的大小导致下载时间长得多,并且需要克隆所有内容而不是单独的部分。

我知道以上都是垃圾,所以我要征求建议...

谢谢

一般来说,monorepos 往往不是一个好主意。一些 Git 操作对提交或其他对象的数量呈线性执行,这意味着将大量文件和大量提交放入一个存储库可能会导致您的存储库显着变慢。即使您现在没有遇到规模问题,将来也可能会遇到,到那时,将代码提取回多个存储库将变得更加困难。

有一些解决方法可以使 monorepos 的性能令人满意,例如 Microsoft 的 Git VFS。但是,最好一开始就不需要它,因为它需要相当多的努力才能让事情正常进行。

您拥有的任何 CI 个工作将需要更长的时间才能 运行,因为它们需要更长的时间来克隆。每次任何项目更改时,您也可能 运行 宁 CI 整个 monorepo 的工作而不是单个组件。

您还会发现您最终可能会在开发人员系统上使用更多的磁盘。可能只需要检查几个存储库的开发人员现在需要更多磁盘 space,这可能需要更大、更昂贵的机器或 VM。

最后,您的 Git 存储库会更大。如果您托管在云端,那可能会给您带来问题。例如,Bitbucket 将所有存储库限制为 2 GB。如果其他供应商的大小开始对他们造成性能问题,他们可能会要求您缩小存储库。即使您在本地托管,大型存储库也需要更多时间来打包和重新打包,需要更多 CPU 和内存来处理相同数量的用户。

您可以为多个存储库使用子模块,而不是使用 monorepo,或者您可以简单地将当前版本的哈希值保存在存储库的一个文件中,并让构建步骤检查它并构建它(如果它是)变了。这些解决方案适用于大型组织,它们也可能适用于您。