Mercurial - 使用类似于货架的队列?

sa1*_*125 12 workflow mercurial shelve mercurial-queue

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

1.开始处理新补丁:

hg qnew fix-bug-1234 -m "fix bug 1234"
# do some work
hg qrefresh
Run Code Online (Sandbox Code Playgroud)

2.获取要处理的新功能/错误:

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
Run Code Online (Sandbox Code Playgroud)

3.此时,我想重新开始修复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
Run Code Online (Sandbox Code Playgroud)

但是,MQ似乎总是使用系列中创建的最新补丁,并且无论我使用的qpop/qpush命令如何都应用它.我应该注意,我工作的文件也是完全独立的(虽然它们有时可以是相同的).

我在这里错过了什么吗?我应该用hg qqueue它吗?谢谢.

bjl*_*aub 10

你可以使用警卫.它们允许您在不重新排列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
Run Code Online (Sandbox Code Playgroud)

此时,您处于堆栈中的补丁feature之前bugfix.现在您可以使用警卫来选择其中一个,并在两者之间切换:

hg qpop -a
hg qguard feature +featureguard
hg qguard bugfix +bugfixguard
Run Code Online (Sandbox Code Playgroud)

如果你想工作feature:

hg qselect featureguard
hg qpush
applying feature
now at: feature
Run Code Online (Sandbox Code Playgroud)

如果你想工作bugfix:

hg qpop -a
hg qselect bugfixguard
hg qpush
applying bugfix
now at: bugfix
Run Code Online (Sandbox Code Playgroud)

请注意,由于您选择了正面防守 bugfixguard,MQ跳过了feature(因为它的正面防守与所选防守不同)并且应用了补丁bugfix(确实与所选防守相匹配).

使用防护装置时hg qseries -v,一些有用的工具会显示一个G而不是通常U的防护,未应用的补丁,并hg qselect -l显示与每个补丁相关的防护装置.


Laz*_*ger 9

  1. 执行hg qpop -a以从堆栈中删除所有修补程序
  2. 执行hg qpush --move some-patch应用"some-patch"而不应用补丁堆栈中可能存在的任何其他补丁