首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >汞-处理类似货架的队列?

汞-处理类似货架的队列?
EN

Stack Overflow用户
提问于 2011-10-31 07:04:58
回答 3查看 1.3K关注 0票数 12

最近,我开始使用MQ,因为我喜欢在不影响回购的情况下处理孤立的修补程序和提交,直到变更集得到足够的细化。在此之前,我曾处理Mercurial的货架扩展,但发现它有点不稳定。在MQ中,我仍然想弄清楚的是,如何使补丁彼此分离,并以不特定的顺序和跨不同的分支应用它们。这是我的正常流量-

1.开始开发一个新的修补程序:

代码语言:javascript
复制
hg qnew fix-bug-1234 -m "fix bug 1234"
# do some work
hg qrefresh

2.获得了一个新特性/bug:

代码语言:javascript
复制
hg qpop fix-bug-1234
hg qnew some-feature -m "implement feature X"
# some work on feature X (perhaps in a different branch)
hg qrefresh

3.在这一点上,我想回到bugfix上,把特性工作放在一边。我以为这很简单

代码语言:javascript
复制
hg qpop some-feature
hg qpush fix-bug-1234
# wrap up bug fix
hg qfinish fix-bug-1234
# get back to work on feature

然而,MQ似乎总是使用在本系列中创建的最新修补程序,并应用它,而不管我使用的qpop/qpush命令。我应该注意,我所处理的文件也是完全独立的(尽管它们有时是相同的)。

我是不是漏掉了什么?我应该为此使用hg qqueue吗?谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-31 13:27:31

你可以用guards。它们允许您在不重新排列series文件的情况下维护修补程序的顺序,并且可以选择性地只应用补丁的子集,仍然是按堆栈顺序排列的。

在你的例子中,一个例子是:

代码语言:javascript
复制
hg qnew bugfix
# ..hack hack..
hg qrefresh
# want to switch over to working on some feature now
hg qpop
hg qnew feature
# ..hack hack..
hg qrefresh

此时,您所处的情况是修补程序feature比堆栈中的bugfix更早。现在,您可以使用警卫来选择一个或另一个,并在两者之间切换:

代码语言:javascript
复制
hg qpop -a
hg qguard feature +featureguard
hg qguard bugfix +bugfixguard

如果您想在feature上工作

代码语言:javascript
复制
hg qselect featureguard
hg qpush
applying feature
now at: feature

如果您想在bugfix上工作

代码语言:javascript
复制
hg qpop -a
hg qselect bugfixguard
hg qpush
applying bugfix
now at: bugfix

请注意,由于您选择了正保护bugfixguard,MQ跳过了feature (因为它的正保护与所选的不同)并应用了修补程序bugfix (这确实与所选的保护匹配)。

在使用保护程序时,一些有用的工具是hg qseries -v,它将显示一个G,而不是用于防护的、未应用的修补程序的通常的U,以及hg qselect -l,它将显示与每个修补程序相关联的保护。

票数 10
EN

Stack Overflow用户

发布于 2011-10-31 09:20:11

  1. 执行hg qpop -a以从堆栈
  2. 中删除所有修补程序,执行hg qpush --move some-patch以应用“某些修补程序”,而无需在修补程序堆栈

中应用它之前的任何其他修补程序。

票数 9
EN

Stack Overflow用户

发布于 2011-10-31 07:59:34

不,你什么都没错过。mq扩展确实提出了一个相当强的假设,即补丁队列是线性的。如果您要创建多补丁功能/修复程序,那么qqueue将使用…。但是,如果您的特性/修复只是单个补丁,并且希望能够应用其中一个而不应用其他补丁,那么重新安排.hg/patches/series (存储应用补丁的顺序)可能会更容易。

我所做的(和手工编辑补丁)足以使我有一个shell别名:

代码语言:javascript
复制
alias viq='vim $(hg root)/.hg/patches/series'

或者,如果您不介意同时应用多个修补程序,则可以使用qgoto

代码语言:javascript
复制
$ hg qser
0 U bug-1234
1 U feature-4321
$ hg qgoto feature-4321
$ hg qser
0 A bug-1234
1 A feature-4321
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7950784

复制
相关文章

相似问题

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