介绍和背景
我们正在更改源代码控制系统,目前正在评估 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
因此,如果有人决定参与项目_x 的工作,他/她可以通过以下方式快速检出所需的模块:
base>cvs co project_x
问题
从直觉上来看,将基础文件夹作为单个存储库似乎不太对。作为程序员,您应该能够检出当前正在使用的项目所需的确切代码子集。您对此有何想法?
另一方面,将每个模块放在单独的存储库中更合适。但这使得程序员更难以检出他们所需的模块。您应该能够通过单个命令来做到这一点。因此,我的问题是:在git/mercurial中是否有类似定义别名的方法?
欢迎提出任何其他问题、建议或指针!
附言:我已经搜索了类似的问题,但感觉没有一个完全适用于我的情况。