Tom*_*bel 5 version-control projects-and-solutions monorepo
在工作中,我们正在开发一个包含大量前端、后端和支持组件的大型应用程序。通常,前端是用 C# 开发的,后端是用 Java 开发的,尽管部分后端也是用 C# 开发的,也可能是后来的 C++。
语言和平台的选择不是任意的;我们尝试权衡每个组件在开发时间、工具链成本、特定开发团队对语言的熟悉程度等方面的相对优点。 然而,所有这些组件的共同点是,它们都是完整操作所必需的产品,并且它们由独立(但高度沟通)的团队同时开发。
以前,我们对 .NET 代码使用 Team Foundation Server,对 Java 代码使用 Subversion;由于团队职责明确分离,因此除了将一个源代码树生成的二进制文件(在本例中为 WAR)放置在另一个源代码树中的不便之外,几乎没有什么问题,以及保持分支和修订同步的高额手动开销。在这个项目中,团队之间的分离程度故意要小得多,并且分支/合并的数量预计要高得多;因此,我们正在转向统一的 VCS,更具体地说是 Subversion。
这让我想到了一个问题:如何有效地混合 Java 和 C# 代码?实际上,我们将拥有依赖于 Java 代码库的 .NET 代码;Java 二进制文件需要运行单元测试代码以外的任何东西(集成测试已经需要二进制文件,而 QA、验收测试等当然也需要)。我们目前想到的是:
/树干
/java
/组件1
/组件2
/图书馆1
/图书馆2
/网
/组装1
/组装2
/...
项目.sln
这个想法是将整个源代码树放在一个分支下;.NET 代码依赖于 Java 代码,因此我们将向解决方案添加一个构建后步骤,该步骤将(最有可能)调用 Java 组件的 ant 脚本。这允许分支整个代码库(对于 .NET 开发人员)或仅 Java 组件(对于 Java 开发人员)。
这个解决方案的问题是:
我很想听听您的意见!
1:我发现最好按组件而不是语言对事物进行分组。如果一个组件需要多种语言作为接口,您仍然需要将它们作为一种语言进行开发、测试和发布。因此,将一个组件拆分到多个存储库中并不是一个好主意。
如果代码的一部分紧密依赖于另一部分,请将其放在一起。最好将组件拆分到存储库中。(这甚至适用于内部结构,特别是随着事物的增长,如果您按类型而不是按功能打包事物,即在 MVC 中,每个类别没有三个巨大的包,而是保留 FooView、FooModel 和FooController 紧。)
svn:externals 可能会工作,并且在更高版本中我认为您可以使用“internals”,即链接到同一存储库中的其他目录。这比管理单独的存储库要容易得多,尤其是在标记和分支方面。(不寒而栗)
2:您始终可以让开发人员设置不同的工作区,或者可能使用工作集。商业 Eclipse 版本比操作系统变体更好地支持共享工作区设置。(还没有尝试过,只是工作过并且对操作系统感到沮丧)
我已经在一个存储库中完成了 C++ (MSVS) 和 Java (Eclipse),并且效果非常好。C++/Python 也类似。确保您的构建系统支持构建和测试所有内容(即使您的 IDE 仅构建一部分)。
| 归档时间: |
|
| 查看次数: |
2641 次 |
| 最近记录: |