2

我经常使用 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 的文件数量通常很少。

有没有比我上面概述的更好的方法来实现这一点?

4

1 回答 1

1

我想你已经介绍了解决这个问题的最典型的方法——我也时不时遇到它。我知道的另一种解决方案是

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

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

您还可以强制弹出补丁 D(使用hg qpop -f),而不是将更改存储到临时补丁中。这仅适用于补丁 D 涉及的文件不与工作副本中的更改相交的情况,即,当您没有使用qrecord记录扩展名创建补丁 D 时。

于 2012-01-11T09:38:34.613 回答