最近,我开始使用MQ,因为我喜欢在不影响回购的情况下处理孤立的修补程序和提交,直到变更集得到足够的细化。在此之前,我曾处理Mercurial的货架扩展,但发现它有点不稳定。在MQ中,我仍然想弄清楚的是,如何使补丁彼此分离,并以不特定的顺序和跨不同的分支应用它们。这是我的正常流量-
1.开始开发一个新的修补程序:
hg qnew fix-bug-1234 -m "fix bug 1234"
# do some work
hg qrefresh2.获得了一个新特性/bug:
hg qpop fix-bug-1234
hg qnew some-feature -m "implement feature X"
# some work on feature X (perhaps in a different branch)
hg qrefresh3.在这一点上,我想回到bugfix上,把特性工作放在一边。我以为这很简单
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吗?谢谢。
发布于 2011-10-31 13:27:31
你可以用guards。它们允许您在不重新排列series文件的情况下维护修补程序的顺序,并且可以选择性地只应用补丁的子集,仍然是按堆栈顺序排列的。
在你的例子中,一个例子是:
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更早。现在,您可以使用警卫来选择一个或另一个,并在两者之间切换:
hg qpop -a
hg qguard feature +featureguard
hg qguard bugfix +bugfixguard如果您想在feature上工作
hg qselect featureguard
hg qpush
applying feature
now at: feature如果您想在bugfix上工作
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,它将显示与每个修补程序相关联的保护。
发布于 2011-10-31 09:20:11
hg qpop -a以从堆栈hg qpush --move some-patch以应用“某些修补程序”,而无需在修补程序堆栈中应用它之前的任何其他修补程序。
发布于 2011-10-31 07:59:34
不,你什么都没错过。mq扩展确实提出了一个相当强的假设,即补丁队列是线性的。如果您要创建多补丁功能/修复程序,那么qqueue将使用…。但是,如果您的特性/修复只是单个补丁,并且希望能够应用其中一个而不应用其他补丁,那么重新安排.hg/patches/series (存储应用补丁的顺序)可能会更容易。
我所做的(和手工编辑补丁)足以使我有一个shell别名:
alias viq='vim $(hg root)/.hg/patches/series'或者,如果您不介意同时应用多个修补程序,则可以使用qgoto
$ hg qser
0 U bug-1234
1 U feature-4321
$ hg qgoto feature-4321
$ hg qser
0 A bug-1234
1 A feature-4321https://stackoverflow.com/questions/7950784
复制相似问题