首先,我有一个非常大的cvs存储库,我正在尝试将事情转换为mercurial。 cvs存储库由几个目录组成,有点像this问题中的情况。但是,每个子目录都不是一个完整的独立项目。每个项目都使用整体的一个子集,但它们的交叉点不是空的。
这是一个澄清的例子:
/cvsroot
.../core
.../feature-1
.../feature-2
Project 1使用core和feature-1;项目2使用核心和功能-2。我不希望在项目2上工作的人在他们的工作副本中有feature-1目录,因为它实际上是一组大约30个目录和一个不可忽略的空间。
有没有办法轻易地(或者,好吧)用mercurial来处理这个问题?我想过为交叉点使用一个单独的存储库,但这不是最理想的。这意味着要做额外的拉动和额外的更新,并可能编写一堆脚本来管理它。
我的另一种选择是复制每个交叉点。这并不好,因为它可能导致公共代码分叉,因为不同的人在它的不同部分工作。
答案 0 :(得分:6)
使用Mercurial subrepositories应该会有所帮助。我将core
,feature-1
和feature-2
定义为独立的存储库,然后使用子存储库功能将它们链接在一起。项目1将引入core
和feature-1
,而项目2将引入core
和feature-2
。每个底层回购只存在一次,因此不同的项目有效地共享它们。
您可以配置子目录,以便当Project 1执行提交和推送时,它会同时推送到core
和feature-1
,或者您可以要求用户通过导航到目录并将它们视为正常的回购。
最后,您只能在存储库级别创建子目录。换句话说,您无法在每个文件级别创建它们。