我们有几个围绕一个共同核心构建的产品线,目前使用外部在 SVN 中维护它们。转移到 mercurial,很自然地转移到使用hg 子存储库。
问题是内核非常大(可能 > GB,根据 SVN 存储库判断),典型的开发人员有时希望同时开发多个产品,例如 3-4。
我是否理解正确,这通常意味着开发人员会为每个开发人员复制核心 3-4 次,包括其整个历史?此外,如果开发人员希望在另一个产品中执行一些简单的操作,这意味着必须首先拉取核心,即使它已经在客户端可用(几次......)?
我们有几个围绕一个共同核心构建的产品线,目前使用外部在 SVN 中维护它们。转移到 mercurial,很自然地转移到使用hg 子存储库。
问题是内核非常大(可能 > GB,根据 SVN 存储库判断),典型的开发人员有时希望同时开发多个产品,例如 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
等等。但我警告您,您将不只对这种设置感到头疼。在工作中,我们有一个类似的设置,但是共享子存储库对于使用它的每个项目都有一个分支(不是命名分支,而是一个克隆分支,一个专用的主存储库)。这样,项目可以独立地修改共享代码,同时仍然可以轻松地在它们之间进行合并。