带有 SUBREPOS 的 Mercurial 分支存储库

标签 mercurial branch

我试图确定人们如何在使用子存储库的同时使用“分支存储库”。

假设我有包含解决方案文件 (.NET) 的 repo Main,并填充了 subrepos A、B、C:

/Main
    - A
    - B
    - C
    MainSolution.sln

A、B 和 C 在其他“主”存储库之间共享时,非常紧密地集成到主项目中。因此,主存储库的一个主要功能将需要对子存储库进行修改(即,它们是共享库,但开发非常活跃)。

现在是添加功能的时候了。此功能太大,一个人无法处理,因此需要将代码推送到中央存储库,以便其他人可以提供帮助。我们还需要能够在功能开发开始之前返回到最后一个“稳定”代码,以防需要修复错误。我相信此时我有两个选择:(1) 在 Main repo 中创建一个命名分支,或者 (2) 创建一个 Main 的新克隆。由于存在子存储库,因此这两个选项都会产生通常不存在的影响。

选项 1) 我认为,创建命名分支将允许提交/推送对子存储库的修改,但只有在其 Main 克隆中更新到该分支的其他人才会受到影响,因为 .hgsubstate 文件被跟踪.但是,子存储库将获得一个新的头,因此(可能)实验性功能最终会被推送到中央存储库。我理解正确吗?

选项 2) “不要使用命名分支,使用‘分支存储库’”有很多倡导者,它们实际上是主存储库的克隆,但名称不同并且存在于中央服务器上。这对我来说有点吸引人,因为它似乎将事物分开(因此与灾难分离,因为同事 - 和我自己! - 仍在学习 Mercurial)。但是当涉及到子存储库时,这个工作流程似乎完全被破坏了,因为创建主存储库的克隆不会创建新的、分离的子存储库克隆。这是一个新的克隆,但它仍然指向同一个子存储库,因此对它们所做的更改将返回到子存储库中!我意识到这是设计使然,这是 Mercurial 非常酷的事情之一(对我来说)。但是人们究竟是如何将这个分支存储库工作流与子存储库一起使用的呢?完全无法想象,对于每个功能/实验/版本/任何内容,我将创建主存储库的新克隆(在中央服务器上),并创建子存储库的克隆(在中央服务器上),并且修改所有 .hgrc/.hgsub 路径以指向正确的中央存储库。

在这一点上,我只是想了解人们如何处理复杂的项目并使用带有分支存储库的子存储库。有什么想法吗?

最佳答案

您还有其他选择。例如,您可以使用书签。从 1.9 版开始,书签可以被推拉,它们不再只是本地的了。由于您通常不希望在新功能完成后将开发“分支”作为命名分支保留下来,因此书签通常是此类事情的更好选择。我倾向于使用书签进行新的开发,并为已发布的版本保存真实的分支。

您还应该注意,子存储库不必按照您描述的方式在多个主存储库之间共享。您实际上可以将子存储库存储在主存储库中(而不是让它们与主存储库处于同一级别,或者完全存储在其他某个位置),这将使它们对每个主存储库都是唯一的,除非您可以推送和当您想共享这些更改时,从其他主存储库中的子存储库中提取。这是我通常的做法。

不幸的是,如果没有白板,其中的大部分内容都很难解释,所以如果不清楚,请告诉我。

关于带有 SUBREPOS 的 Mercurial 分支存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3225947/

相关文章:

regex - 使用 Glob 语法忽略 Mercurial 中的文件

svn - 是否有一个工具可以跨多个版本控制系统(Git、Mercurial、TFS、SVN)运行持续集成

version-control - 如何使用 Mercurial 在多个存储库之间共享代码?

分支开关上的 GIT 污迹过滤器 : How to get log from "new" branch?

svn - 尝试过 redmine 和 trac,但它们都不允许我在项目之间共享里程碑和错误

eclipse - 多个 Eclipse 项目中的多个 Git 分支

Mercurial 存储库窄克隆?

java - 如何使用 Branch.io 实现推荐系统

SVN部分分支

maven - 通过 Maven 将 Mercurial 工作目录变更集 ID(例如(838cb9c0367e))注入(inject)属性文件?