签出mercurial存储库的子集

签出mercurial存储库的子集,mercurial,migration,cvs,Mercurial,Migration,Cvs,首先,我有一个非常大的cvs存储库,我正在尝试将内容切换到mercurial。cvs存储库由几个目录组成,有点像所讨论的情况。但是,每个子目录并不是一个完整的独立项目。每个项目使用整个项目的一个子集,但它们的交点不是空的 下面是一个需要澄清的示例: /cvsroot .../core .../feature-1 .../feature-2 项目1使用核心和功能-1;项目2使用core和feature-2。我不希望从事project 2工作的人在他们的工作副本中有feat

首先,我有一个非常大的cvs存储库,我正在尝试将内容切换到mercurial。cvs存储库由几个目录组成,有点像所讨论的情况。但是,每个子目录并不是一个完整的独立项目。每个项目使用整个项目的一个子集,但它们的交点不是空的

下面是一个需要澄清的示例:

/cvsroot
    .../core
    .../feature-1
    .../feature-2
项目1使用核心和功能-1;项目2使用core和feature-2。我不希望从事project 2工作的人在他们的工作副本中有feature-1目录,因为它实际上是一组大约30个目录和一个相当大的空间

有没有一种方法可以用mercurial轻松地解决这个问题?我曾考虑过为交叉点使用一个单独的存储库,但这并不理想。这意味着要进行额外的拉取和更新,可能还要编写一堆脚本来管理它

我的另一个选择是在每个区域复制交叉点。但这并不好,因为这可能会导致通用代码分叉,因为不同的人处理它的不同部分。

使用Mercurial应该会有所帮助。我将
core
feature-1
feature-2
定义为独立的存储库,然后使用子存储库功能将它们链接在一起。项目1将引入
核心
功能-1
,而项目2将引入
核心
功能-2
。每个基础回购协议只存在一次,因此不同的项目有效地共享了它们

您可以配置子repo,以便当Project 1执行提交和推送时,它同时推送到
核心
功能-1
,或者您可以要求用户通过导航到目录并将其视为正常的repo来显式提交


最后,您只能在存储库级别创建子repo。换句话说,您不能在每个文件级别创建它们。

@Mark Stahler:我的软件团队已经使用它们一段时间了,而且它们看起来很稳定。有一些不太理想的事情,但我不认为它们的不稳定性-更多的只是可用性问题。