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