共享部分monorepo


12

当前,我们有一个复杂而效率低下的构建系统,其中包含许多SVN和Git存储库(每个约50%),其中包括一个git子模块存储库。我们也有自制脚本,可以或多或少地管理整个事情。
我们的(封闭源代码)代码库的一个主要要点是紧密耦合,并且每个项目都在同一版本下同时发布。

我们希望将其迁移到更简单的系统和单个VCS,并正在考虑几个选项,包括:git子模块,google repo和monorepos。最终的VCS尚未定义(强制使用的选项除外),并且如果更适合我们的情况,则可以是svn,git甚至其他名称。

我们试图列出每种解决方案的优缺点,而monorepos当前面临的主要问题之一是,这似乎并不容易,甚至可能只与外部实体共享某些模块。我们希望这些人员能够检出并在这些模块上正常工作,但不能访问回购其余部分的代码或历史记录。目前,这不是我们经常或广泛进行的事情,但将来可能会发生,并且我们不希望这成为噩梦,因为我们在这里做出了错误的决定。

VCS系统中是否存在这样的特权管理系统?
还是有什么办法可以减轻这个问题?


您会考虑Team Foundation Server或服务吗?它支持Git,并包括一些不错的工作流程和持续集成功能
hanzolo

您要考虑的是哪种monorepo实现?
Dan Cornilescu

Answers:


3

根据您的描述,我认为您在这里有两个选择:

  1. 使用git子模块-借助GitHub(或其他服务)之类的服务,您可以管理每个项目的权限并解耦您的部署过程。但是,我听说git子模块随着时间的流逝最终成为一个巨大的痛苦。干净地重新初始化/重新下载git子模块的自动化脚本可以在这里提供帮助。
  2. 将您的仓库分解为独立的服务。这使您可以同时进行开发,但同时也需要承受大量的痛苦,因为您需要开始考虑服务发现,部署多个服务,开发环境,持续集成/部署以及管理服务带来的所有其他小乐趣。微服务架构。
  3. 使用正式的程序包管理系统,例如用于Python的pip,用于Node.js的npm,用于Java的Maven等。将所需的代码段部署到存储库中,并在必要时在主存储库中使用它们,这应该使您具有能力对它们进行版本控制。根据模块和主存储库之间的耦合,您可能无法独立地实际提取,运行或测试较低级别的模块。但是,如果可以的话,这是一个很好的方法,可以与多个存储库很好地融合在一起,同时仍然可以通过从远程存储库安装它们来在构建时集成软件包。

不幸的是,这些选项都不是完美的,但根据代码库的状态,它们都是有效的。您的描述听起来像是选项3在这里可能效果最好。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.