具有多个非实时环境的 Mercurial 工作流程
我从事的项目有 Live、RC 和 QA。当各个问题准备就绪后,质量检查团队会测试票证的功能。一旦票证通过,就可以转移到 RC。在发布之前,我们会将所有已准备好的问题放在 RC 上,以确保票证不会相互造成问题。一旦完成,所有 RC 都会搬到一起生活。
使用 Mercurial 处理此问题的好方法是什么?我们当前的流程存在一些问题。
我们当前的流程:
Live 运行默认值,RC 运行默认值(实时)创建的分支,QA 运行它自己的分支(主干),该分支是过去从默认值分支出来的。
问题从默认分支,工作,然后合并到主干。一旦票证准备好进入 RC,它就会合并到即将发布的分支中。当进行测试时,发布分支将合并到默认分支中,默认分支将合并回主干中。我们遇到的问题是,一段时间后发生了一些事情,所有的冲突都会合并到主干中。如果我们在该合并中解决与主干的冲突,它往往会更快地破坏主干,如果我们有冲突,我们会将默认值合并到我们的分支中并在该提交中解决它们。这通常有效,但几周或几个月后主干似乎坏了,我们无法再解决冲突。
更新:
我们的流程是这样的,票证 A 可能会进入 QA 环境并在那里停留一段时间。票证 B 可能会在票证 A 离开 QA 环境之前开发、移至 QA、QAed 和 RC 并发布。这不是现在可以改变的事情。我正在寻找适合我们需求的解决方案。我有能力在存储库级别影响流程的实施,但目前没有能力以显着的方式修改整个流程。
I work on a project where we have Live, RC, and QA. Individual issues go to QA when they're ready where the QA team tests the ticket's functionality. Once the ticket passes, it's ready to move to RC. Before a release we take all of the issues that are ready and put them all on RC together where we make sure that tickets don't cause problems with each other. Once that's done all of RC moves to live together.
What is a good way to handle this with Mercurial? Our current process has some problems.
Our current process:
Live runs default, RC runs a branch created off of default (live) and QA runs it's own branch (trunk) that branched from default in the past.
Issues are branched from default, worked, and then merged to trunk. Once a ticket is ready to go to RC it gets merged into the upcoming release branch. When that gets tested the release branch gets merged into default and default gets merged back into trunk. The problem we're running into is that after a while something happens and everything gets conflicts merging to trunk. If we resolve conflicts to trunk in that merge it tends to break trunk much faster, if we have conflicts we merge default into our branch and resolve them in that commit. This usually works but after a few weeks or months trunk seems to break and we can no longer resolve the conflicts.
Update:
Our process works such that ticket A might move into the QA environment and stay there for a while. Ticket B might be developed, moved to QA, QAed and on RC and released before ticket A ever leaves the QA environment. That is not something that can be changed right now. I'm looking for a solution that fits our needs. I have the ability to influence our implementation of the process at the repository level, but not the ability to modify the over all process in a significant way right now.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我认为您最好的选择是查看 Mercurial 建议的工作流程。我可以根据我自己的结构化发布周期经验告诉您,该周期的代码(功能、增强功能和错误修复)将进入 QA 环境进行验证和准备发布,然后从这些发布标签分支到紧急补丁,Mercurial 非常适合。
对于我下面的步骤,“主干”就是其他人可能所说的主线。 Mercurial 中没有任何术语“主干”。您只有正在使用的存储库,它要么只是您的本地存储库,要么是另一个存储库的克隆(仍然是本地的)。
hg tag "name of tag"
)。hg update "tag name"
然后从已发布的标记版本(例如 1.0.0)创建分支,然后使用hgbranch "name分支”
(可能应该与标签名称匹配)。一直以来,新功能、特性和非关键错误修复都可以在“主干”中完成,继续按计划发布代码的“下一个”版本。
I think your best bet is reviewing Mercurial's suggested workflows. I can tell you from my own experience with a structured release cycle that had code (features, enhancements, and bug fixes) going to a QA environment for verification and prepping releases, then branching from those release tags for emergency patches, Mercurial fits nicely.
For my steps below, "trunk" is just what others might call mainline. There isn't any term "trunk" in Mercurial. You just have the repository you are working from, which is either just your local repository or a clone of another repository (still local).
hg tag "name of tag"
).hg update "tag name"
thenhg branch "name of branch"
(which should probably match the tag name).All the while, new functionality, features, and non-critical bug fixes can be done in "trunk", continuing with the "next" version of the code to be released on a schedule.