2011-04-15 42 views
2

首先,我有一个非常大的cvs存储库,我试图将事情切换到mercurial。这个CVS库由几个目录组成,有点像this问题的情况。但是,每个子目录不是一个完整的独立项目。每个项目都使用整个子集,但它们的交点不是空的。检出一个mercurial存储库的子集

下面是一个例子来阐明:

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

项目1使用芯和特征-1;项目2使用核心和功能-2。我不希望从事项目2工作的人在他们的工作副本中拥有功能-1目录,因为它实际上是一组约30个目录并且空间不是很小。

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

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

回答

6

使用Mercurial subrepositories应该在这里帮助。我将定义corefeature-1feature-2作为独立的存储库,然后使用子备份库功能将它们链接在一起。项目1将拉动corefeature-1,而项目2将拉动corefeature-2。每个基础回购仅存在一次,因此不同的项目有效地共享它们。

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

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

+0

+1:子回购是这种情况下的免费方式。 – 2011-04-15 18:39:27

+0

现在hg sub repos稳定吗? – 2011-04-15 18:44:21

+0

@Mark Stahler:我与之合作的SW团队已经使用了他们一段时间了,他们看起来很稳定。关于它们有一些不太理想的东西,但我不会认为它们是不稳定的 - 更多的是可用性问题。 – dls 2011-04-15 18:51:37

相关问题