假设一个大型项目被拆分为多个项目,每个项目都位于一个单独的 Mercurial 存储库中(根据在 Mercurial 中组织具有共享依赖项的项目的好方法是什么?)。
还假设在内部使用依赖管理器(我们使用的是 NuGet,但同样适用于 Maven),这样:
- ProjectA 依赖于 Ninject 和 MongoDB
- ProjectB 依赖于 ProjectA 和 log4net
A、B项目可以独立搭建;NuGet 会自动从 NuGet 服务器(在本例中为 ProGet)下载 OSS 和内部依赖项。
最后假设 ProjectB 依赖于 ProjectA 的 v1.2.3.4-SNAPSHOT,并且 CI 服务器不断更新 NuGet 服务器中的 ProjectA.1.2.3.4-SNAPSHOT 包。因此,ProjectB 将始终根据 ProjectA 的最新签入更改进行开发。
如果项目 A 和 B 都需要相关更改怎么办?有什么巧妙而巧妙的方法可以正确地做到这一点?一些想法:
- 开发人员签出项目 A 和 B。对 A 进行更改、构建和签入。开发人员等待 CI 服务器构建和更新 NuGet 服务器。对 B 进行了更改、构建和签入。(我不喜欢这样做,因为代码正在作为开发过程的一部分进行签入。)
- 开发人员检查项目 A 和 B,并重新连接 B 以使用 A 源作为依赖项(而不是 NuGet 包 ProjectA)。对 A 和 B 都进行了更改。在适当的测试后,对 A 和 B 一起执行签入,但开发人员必须确保不签入依赖项更改。
我不是特别擅长这个,所以我认为有人会用一些非常聪明的东西把我的想法从水中吹走。