从一些当前变化中制作新补丁的有效方法

时间:2012-01-11 09:21:13

标签: mercurial mercurial-queue

我正在使用mercurial排队很多,而且我真的很开心 他们,但有一个工作流程,我觉得过于复杂。 有时候我正在修补补丁,然后我 意识到我一直在做一些应该在的东西 单独的补丁(就像我修复了我在工作时发现的一个错误 在功能上,或为我实际想要添加的另一个功能 有一个单独的补丁)。

因此工作目录的状态是:补丁A,B,C 应用,加上应该放入补丁C的更改,以及更改 应该在一个新的补丁D。

我目前的工作流程如下:

hg qnew D.patch files-for-patch-D..
hg qnew temp.patch # changes for patch C
hg qpop
hg qpop
# Now I'm on patch C
hg qfold temp.patch # Integrate changes into patch C
# Here I could have patch errors.. 
hg qpush

我知道我也可以这样做

hg qrefresh files-for-patch-C..
hg qnew -m "..." new-feature.patch 

这种方法的缺点是文件的数量 补丁C通常很大,不得不笨拙 把所有这些都放到命令行上。的文件数量 补丁D通常比较小。

有没有比我概述的更好的方法来实现这一目标 以上?

1 个答案:

答案 0 :(得分:1)

我认为你已经涵盖了解决这个问题的最典型方法 - 我也时不时地遇到这个问题。我知道的一个替代解决方案是

$ hg qrefresh -X files-for-patch-D
$ hg qnew D.patch

即:排除您为补丁D更改的少数文件,而不是尝试包含补丁C的所有正确文件。

您还可以强制弹出补丁D(使用hg qpop -f)而不是将更改存储到临时补丁中。仅当补丁D触摸的文件与工作副本中的更改不相交时,即仅当您未使用record extension中的qrecord创建补丁D时,此方法才有效。