签出mercurial存储库的子集

nmi*_*els 2 migration cvs mercurial

首先,我有一个非常大的cvs存储库,我正在尝试将事情转换为mercurial.cvs存储库由几个目录组成,有点像这个问题中的情况.但是,每个子目录都不是一个完整的独立项目.每个项目都使用整体的一个子集,但它们的交叉点不是空的.

这是一个澄清的例子:

/cvsroot
    .../core
    .../feature-1
    .../feature-2
Run Code Online (Sandbox Code Playgroud)

项目1使用核心和功能1; 项目2使用核心和功能-2.我不希望在项目2上工作的人在他们的工作副本中有feature-1目录,因为它实际上是一组大约30个目录和一个不可忽略的空间量.

有没有办法用mercurial轻松(或者,好吧)处理这个问题?我想过为交叉点使用一个单独的存储库,但这不是最理想的.这意味着要进行额外的拉动和额外的更新,并且可能会编写一堆脚本来管理它.

我的另一个选择是复制每个交叉点.这并不好,因为它可能导致公共代码分叉,因为不同的人在它的不同部分工作.

dls*_*dls 6

使用Mercurial子存储库应该有帮助.我将定义core,feature-1feature-2作为独立的存储库,然后使用子存储库功能将它们链接在一起.项目1会拉在corefeature-1,而项目2将拉corefeature-2.每个底层回购只存在一次,因此不同的项目有效地共享它们.

您可以配置subrepos使项目1执行时提交和推送,这必将推动双方corefeature-1,或者你可以要求用户明确地通过导航进入目录和对待他们像一个正常的回购承诺给他们.

最后,您只能在存储库级别创建子目录.换句话说,您无法在每个文件级别创建它们.