我们有几个围绕公共核心构建的产品线,目前使用外部在SVN中维护它们。转移到mercurial,自然会转移到使用hg子存储库。
问题是核心相当大(根据SVN回购判断,可能>GB),典型的开发人员有时希望同时开发几个产品,比如3-4。
我说得对吗,这通常意味着一个开发人员会为每个开发人员复制3-4次核心,以及它的整个历史?此外,如果开发人员希望在另一个产品中执行一些简单的操作,这意味着必须首先提取核心,即使它已经在客户端可用(好几次…)?
为了真正共享子数据库(以及而不是其工作副本),您可以使用共享扩展。然而,这使得克隆过程有点违背直觉:
hg clone -U remote_core core
hg clone -U remote_projectA projectA
cd projectA
hg share ../core core
hg update
cd ..
hg clone -U remote_projectB projectB
cd projectB
hg share ../core core
hg update
等等。但我警告你,这种设置会让你头疼不止一次。在工作中,我们有类似的设置,但共享子库为每个使用它的项目都有一个分支(不是命名分支,而是克隆分支,一个专用的主存储库)。这样,项目可以独立修改共享代码,同时仍然可以轻松地进行合并。