首先,我有一个很大的cvs存储库,我正在尝试将其转换为 Mercurial 。 cvs存储库由几个目录组成,类似于this问题中的情况。但是,每个子目录都不是一个完整的独立项目。每个项目都使用整体的子集,但是它们的交集并不为空。
这里有一个例子可以说明:
/cvsroot
.../core
.../feature-1
.../feature-2
项目1使用core和feature-1;项目2使用核心和功能2。我不希望在项目2上工作的人的工作副本中包含feature-1目录,因为它实际上是大约30个目录的集合,并且空间并不小。
有没有一种方法可以轻松(或替代地,很好)地解决这一问题?我考虑过为路口使用一个单独的存储库,但这不是最理想的。这意味着要进行额外的提取和更新,并可能编写大量脚本来对其进行管理。
我的另一个选择是在每个路口中复制交叉路口。但这并不好,因为它可能导致通用代码 fork ,因为不同的人在其中的不同部分上工作。
最佳答案
在这里使用Mercurial subrepositories应该会有所帮助。我将core
,feature-1
和feature-2
定义为独立的存储库,然后使用子存储库功能将它们链接在一起。项目1将引入core
和feature-1
,而项目2将引入core
和feature-2
。每个基础存储库仅存在一次,因此不同的项目可以有效地共享它们。
您可以配置子仓库,以便在Project 1执行提交和推送时,它同时推送到core
和feature-1
,或者您可以要求用户通过导航到目录并将它们视为普通 repo 协议(protocol)来明确地提交给它们。
最后,您只能在存储库级别创建子存储库。换句话说,您不能在每个文件级别上创建它们。
关于mercurial - check out 仓库的子集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5680912/