签出mercurial存储库的子集

时间:2011-04-15 18:33:05

标签: mercurial migration cvs

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

这是一个澄清的例子:

/cvsroot
    .../core
    .../feature-1
    .../feature-2

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

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

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

1 个答案:

答案 0 :(得分:6)

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

您可以配置子目录,以便当Project 1执行提交和推送时,它会同时推送到corefeature-1,或者您可以要求用户通过导航到目录并将它们视为正常的回购。

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