简介和背景
我们正在更改源代码控制系统,我们目前正在评估 git 和 mercurial。总代码库大约有 600 万行代码,所以不算大,也不算小。
让我首先简要介绍一下当前存储库设计的外观。
我们有一个用于完整代码库的基本文件夹,在该级别之下,有各种不同的上下文中使用的各种模块。例如,“dllproject1”和“dllproject2”可以被视为完全独立的项目。
我们正在开发的软件是我们称之为配置器的东西,它可以根据不同的客户需求进行无休止的定制。我们总共可能有 50 个不同的版本。然而,他们有一个共同点。它们都共享几个强制性模块(mandatory_module1 ..)。这些文件夹基本上包含内核/核心代码和公共语言资源等。然后,所有自定义都可以是其他模块(module1 ..)之间的任意组合。
由于我们目前使用的是 cvs,因此我们在 CVSROOT/modules 文件中添加了别名。它们可能看起来像:
core –a mandatory_module1 mandatory_module2 mandatory_module3
project_x –a module1 module3 module5 core
因此,如果有人决定在 project_x 上工作,他/她可以快速检查以下所需的模块:
base>cvs co project_x
问题
直觉上,将基本文件夹作为单个存储库感觉是错误的。作为程序员,您应该能够检查您正在使用的当前项目所需的确切代码子集。您对此有何看法?
另一方面,将这些模块中的每一个放在单独的存储库中感觉更合适。但这使得程序员更难检查他们需要的模块。您应该能够通过单个命令来执行此操作。所以我的问题是:在 git/mercurial 中是否有类似的定义别名的方法?
任何其他问题,建议,指针都非常欢迎!
PS。我已经搜索过类似的问题,但并不觉得其中任何一个问题 100% 地适用于我的情况。