Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Architecture Mercurial存储库结构,用于功能、稳定版本等_Architecture_Mercurial_Workflow_Repository - Fatal编程技术网

Architecture Mercurial存储库结构,用于功能、稳定版本等

Architecture Mercurial存储库结构,用于功能、稳定版本等,architecture,mercurial,workflow,repository,Architecture,Mercurial,Workflow,Repository,如果需要的话,我会提出一个更具体的问题,或者如果你们都认为这是合适的话,我会把这个问题变成一个社区维基,但我的问题是: 我的开发团队最近开始使用Mercurial(从subversion迁移而来),到目前为止,我们非常喜欢它。我想知道是否有关于存储库体系结构的“最佳实践”资源。我感兴趣的是,在开发功能和新版本时,留下一份稳定的repo副本(用于装运/紧急bug修复)的最佳方法是什么。我已经读了很多关于命名分支与克隆存储库的文章,我希望你们中的一些hg人员能够对你们的团队的工作有所帮助 在测试功能

如果需要的话,我会提出一个更具体的问题,或者如果你们都认为这是合适的话,我会把这个问题变成一个社区维基,但我的问题是:

我的开发团队最近开始使用Mercurial(从subversion迁移而来),到目前为止,我们非常喜欢它。我想知道是否有关于存储库体系结构的“最佳实践”资源。我感兴趣的是,在开发功能和新版本时,留下一份稳定的repo副本(用于装运/紧急bug修复)的最佳方法是什么。我已经读了很多关于命名分支与克隆存储库的文章,我希望你们中的一些hg人员能够对你们的团队的工作有所帮助

在测试功能并准备好下一版本后,什么更容易合并?我提到的这两种方法有没有严重的缺点?还有其他回购管理策略吗

我们即将部署我们的2.0.0版本,我希望在它发布后以一种新的方式与hg合作,重新开始

让我重述一下我仍在努力学习的一些基础知识——假设我明天完成2.0.0。。。我想开始2.1.0的工作,我该怎么做?克隆我的repo,将其命名为“working/projects/widgets2.1”,并继续前进,让我的“workin/projects/widgets2.0”坐在那里,准备好在bug修复情况下使用吗


此外,如果客户打电话说有一个bug,并且widget机器在震动,烟雾开始滚滚,我是否打开widgets2.0,修复bug,部署到服务器,然后提交/推送?然后我是否要回到widgets2.1并拉/合并该bug修复程序?

我希望早些时候听到的一条建议是“尽早修复bug”,我不是说在编写代码之后立即修复bug。我的意思是,如果您正在修复两年前变更集400中引入的错误,您应该:

hg update 400
vi .... # fix bug
hg commit
Mercurial会说“new head created”,这一点一开始似乎令人担忧,但您所做的是创建一个变更集(实际上是一个匿名分支),它可以
hg拉入任何有缺陷的分支

在我弄明白之前,我们会在发布分支、开发分支或其他活动开发线上修复bug,然后我们会想将该修复转移到其他分支,但做得不好。原因是,当您拉取(作为克隆的分支)或合并(命名或匿名分支)时,有一个明确的要求,即如果您拉取/合并变更集X,那么您就拉取/合并变更集X的所有祖先——但您不一定需要所有这些祖先(可能是新的、实验性的功能)你只需要修复bug

在没有祖先的情况下实现变革需要通过导入/导出或移植或其他带外机制,从一种形式到另一种形式的“樱桃采摘”

但是,如果您使bugfix变更集的唯一祖先是bug最初创建时所在的变更集,那么您可以始终将该修复“hg pull”到任何有bug的分支中,而不带任何其他内容

为了让它更接近您的原始查询,如果您使用克隆作为分支(我的首选)或命名分支,我上面的建议同样适用。

这里有一个很好的“结构”教程:


我也在非常熟悉Subversion之后开始使用Mercurial,我对这个切换非常满意——hg确实为我解决了一些问题。我基本上不需要为任何“命名分支”操心,只需要依靠主管来完成我的工作。我确保充分使用日志,以确定当我需要返回到旧版本时,我需要去哪里。当然,标签也很好,教程也介绍了这一点。

我工作的公司正在考虑迁移到Mercurial,并考虑为每个正在开发的功能支持“功能分支”。功能分支是一个命名分支,它包含一些新的开发或对现有功能的更新—基本上是您想要的任何内容

功能分支仅存在于用户的repo克隆中,直到它们准备好集成到开发主线中,此时它们被合并回活动的开发分支中。如果有人担任生成管理器角色,则可以将功能分支推送到未合并的共享repo,并且管理器可以根据需要合并它们。如果不这样做,开发人员可以将它们合并到克隆的repo中,然后推送已经合并的分支。(旁注:Hg仍将在共享回购中显示合并的功能分支)

一旦共享回购协议更新到稳定点,就可以对其进行标记并发布。错误修复可以应用于标记的版本,如果需要延长或并行开发,可以创建第二个活动的开发分支,将标记的版本作为父级。Ry4an的错误修复方法也可以在这里应用

可以使用功能克隆而不是功能分支复制整个工作流,但它会改变一些开发动态。如果您能够为每个人提供一次发布机会,这将有助于您和您的团队做出决定

编辑以解决新添加的特定问题

假设我明天完成2.0.0。。。我 想要开始2.1.0的工作,我该怎么做 是吗

在该方案中,您将在2.0.0完成时创建一个标记,然后在默认分支上继续使用2.1.0。后续提交到默认分支和从此点开始的任何新功能分支将支持2.1.0

此外,如果客户致电 说有个bug和小部件 机器在震动,烟雾弥漫 开始翻滚,我会打开吗 widgets2.0,修复错误,部署到 服务器,然后提交/推送

2.0.0 wou的错误修复
$ hg update 2.0
hack hack hack
$ hg commit -m "Fix nasty bug"
$ hg tag 2.0.1