git - 您使用什么工具或技术来跨存储库同步配置?
问题描述
我们有几个基础存储库,用于快速构建新项目。这些包括用于以下内容的基本存储库:
- TypeScript + 节点库
- TypeScript + Node 微服务/工作者
- 角应用
- gRPC 存根/protobuf 库
- 等等
基本存储库包含启动新项目所需的所有配置和文件夹结构,类似于ng new
, create-react-app
, yeoman 生成器等。这包括 CI 配置、测试配置、linting 配置、tsconfig、package.json 以及脚本和开发依赖项, 用于设置、扩展建议、启动配置等的 VSCode 文件。基本上,存储库包含您需要在这些类似存储库之间共享的所有内容,除了代码。
有一些工具可以在 repos 之间共享代码,比如 bit,或者您也可以发布库来共享代码,我们广泛使用这些工具。但是,我还没有找到在许多存储库之间共享配置文件的好方法。我们可以简单地从基础存储库克隆或编写我们自己的生成器,但问题是保持配置同步。例如,如果我们更改 CI 配置,我不想记住哪些 50 个存储库基于也需要更改的存储库。
我们不能成为这里唯一一家拥有超过 100 个 repos 的公司,而且随着我们拆分成越来越多的分布式服务和库,我们的增长也看不到尽头。我们可以采用 monorepository 模式,但它仍然没有改变这样一个事实,即 monorepo 中的每个项目仍然需要自己的配置,并且必须在所有项目之间保持同步。
所以问题是,我缺少什么工具或技术可以让这些配置在许多不同的存储库中保持同步?
解决方案
这是一个很酷的问题要解决。我觉得我们有一个非常老套的解决方案来避免重复工作。我们在eslintrc
包含prettierrc
在.gitignore
. 该package.json
脚本指向该文件夹中的配置文件。
它不是它自己的 repo,我们使用husky
pre-commit
hook 来运行 lint 和格式化脚本。在制作 PR 时我们不会运行它(也许我们应该这样做)。现在没有什么可以阻止您使用该no-verify
标志来提交错误代码,但代码审查应该会发现这一点。
推荐阅读
- php - 从 Laravel Query Builder 中的其他表中获取数据
- flutter - 有没有办法在将小部件放在屏幕上之前知道它的尺寸?
- android - 反射与寻找子视图
- c# - 在 .net 中设置 SOAP 以获取稍后用于执行请求的 SecurityToken
- java - 我收到错误原因:java.lang.NullPointerException:尝试调用虚拟方法'java.lang.Class java.lang.Object.getClass()'
- azure - 在 Azure 门户中,是否可以在创建主机池后添加工作区?
- reactjs - 反应:setState 不更新?
- angular - 为什么 @cacheable 装饰器使我的错误测试在 Jasmine 中失败
- java - 我如何在 android studio 中绘制任何特定的多个对象?我想在字母图像上使用画笔
- php - Laravel 验证规则:required_without