首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带SUBREPOS的Mercurial分支存储库

带SUBREPOS的Mercurial分支存储库
EN

Stack Overflow用户
提问于 2010-07-12 12:47:27
回答 2查看 1.8K关注 0票数 11

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

假设我有一个包含解决方案文件(.NET)的存储库Main,并用子存储库A、B、C填充:

代码语言:javascript
复制
/Main
    - A
    - B
    - C
    MainSolution.sln

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

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

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

选项2)有许多“不使用命名分支,使用‘分支存储库’”的倡导者,它们实际上是主存储库的克隆,但命名不同,并且存在于中央服务器上。这对我来说有点吸引力,因为它似乎让事情保持分离(并因此远离灾难,因为同事--和我自己--仍在学习善变)。但是,当涉及到子存储库时,这个工作流程似乎完全被打破了,因为创建主存储库的克隆不会创建子存储库的新的、分离的克隆。这是一个新的克隆,但它仍然指向相同的subrepos,因此对它们所做的更改将会重新出现在subrepos中!我意识到这是设计出来的,这是Mercurial真正酷的事情之一(对我来说)。但是人们到底是如何使用子存储库的分支存储库工作流的呢?对于每个特性/实验/版本/任何东西,我都要创建主存储库的新克隆(在中央服务器上),创建子存储库的克隆(在中央服务器上),并修改所有.hgrc/.hgsub路径以指向正确的中央存储库,这是完全不可想象的。

在这一点上,我只是试图理解人们如何在一个复杂的项目中工作,以及如何使用分支存储库的subrepos。有什么想法吗?

EN

回答 2

Stack Overflow用户

发布于 2012-05-06 15:05:04

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

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

不幸的是,如果没有白板,这很难解释,所以如果这不清楚,请告诉我。

票数 3
EN

Stack Overflow用户

发布于 2010-07-16 10:51:15

对于最有可能最终合并到默认分支中的功能,我更喜欢命名分支。切换分支比切换repos容易得多。

使用命名分支,您永远不需要担心意外地将开发的不稳定分支推入稳定的代码库。已命名的分支已经存在,但除非开发人员请求,否则不会通过更新检索它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3225947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档