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