【问题标题】:Checking out a subset of a mercurial repository检出一个 mercurial 存储库的子集
【发布时间】:2011-04-15 18:33:05
【问题描述】:

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

这里有一个例子来说明:

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

项目 1 使用 core 和 feature-1;项目 2 使用核心和功能 2。我不希望从事项目 2 的人在他们的工作副本中包含 feature-1 目录,因为它实际上是一组大约 30 个目录,而且空间量并不小。

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

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

【问题讨论】:

    标签: mercurial migration cvs


    【解决方案1】:

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

    您可以配置子存储库,以便在项目 1 执行提交和推送时,它会推送到 core 和 feature-1,或者您可以通过导航到目录并处理它们来要求用户明确提交它们就像一个普通的回购一样。

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

    【讨论】:

    • @Mark Stahler:与我合作的软件团队已经使用它们一段时间了,它们看起来很稳定。它们有一些不太理想的地方,但我不会认为它们不稳定 - 更多的是可用性问题。
    猜你喜欢
    • 1970-01-01
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 2013-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    相关资源
    最近更新 更多