10

如果我已经编写了一段时间的代码,并且忘记创建补丁系列,我该如何回顾性地创建补丁系列?到目前为止,唯一想到的是:

# Prepare and test the first batch of changes.
$ hg qrecord -m 'first batch' 1.patch
$ hg qnew -m 'stash downstream changes' stash-1.patch
$ hg qdelete -k temp-1.patch
$ make hello
cc     hello.c   -o hello
hello.c: In function ‘main’:
hello.c:4: error: syntax error at end of input
make: *** [hello] Error 1
$ echo '}' >> hello.c
$ make hello
cc     hello.c   -o hello
$ hg qrefresh

# Recover the stashed changes.
$ patch -p1 < .hg/patches/last.patch

# And around we go again!
$ hg qrecord -m 'second batch' 2.patch
$ hg qnew -m 'stash downstream changes' stash-2.patch
$ hg qdelete -k stash-2.patch
$ make hello
...

这种非常繁琐的方法也是危险的。我可能会忘记-kon qdelete,此时我会用前额撞砖墙几分钟,或者在 qrecord 操作期间我可能包含太多或太少。

有没有更好的办法?

(我真正想要的是能够hg qpop在我想要拆分的补丁之前,并使用当前不存在的命令,hg qunrecord以交互方式将补丁中的更改吸到我的工作目录中。一旦我很高兴随着这些变化,hg qnew -f可以在旧补丁前面挤一个新补丁。)

4

5 回答 5

6

MQTutorial解释了如何拆分补丁。因此,您可以从您当前的工作中创建一个补丁并将其拆分为多个补丁。

于 2010-01-31T13:40:38.710 回答
3

TortoiseHg 在提交对话框中具有非常有用的功能“Hunk Selection”,用于此类工作:
http ://tortoisehg.bitbucket.io/manual/2.0/commit.html#change-selection

于 2010-01-26T06:20:45.010 回答
2

我认为crecord 扩展会让你这样做。它为您提供了一个基于交互式诅咒的界面,您可以在其中准确选择提交中的内容。

于 2010-01-26T00:57:30.527 回答
1

启用内置扩展:

[extensions]
mq=
record=
shelve=

然后将 MQ 移动到工作树中并拆分更改并删除原始补丁:

$ hg qpop my.patch
$ patch -p1 <.hg/patches/my.patch

$ hg qnew -i my1.patch
 ....
$ hg qnew -i my2.patch
 ....
$ hg qnew myN.patch   # last without interactive stuff

$ hg qdelete --keep my.patch

在两者之间my$i.patchmy$((i+1)).patch您可以使用hg shelve/hg unshelve来测试项目是否已构建并通过测试,my$i.patch而无需以后进行更改!

如果您发现此阶段缺少某些内容,请使用hg qref搁置的更改或未搁置hg qref -i的更改!

另请参阅Mercurial:将 MQ 补丁移至搁置?

于 2015-01-08T15:33:19.147 回答
0

首先,安装 crecord,因为它只是一种更好的拆分更改的方式。

$ hg qcrecord part1
$ hg qnew part2 # ok, slightly a lie at this point
$ hg qpop
$ echo "}" >> hello.c
$ hg qrefresh
$ hg qpush
$ hg qcrefresh # Keep just what you want in part2
$ ...

这里唯一对 crecord 特殊的是 qcrefresh 命令。如果您不是 curses 粉丝,您仍然可以在这里做所有相同的事情,只需将 qcrefresh 替换为hg qrefresh -X 're:.'. 或者hg qrefresh -I aauuuuuggghhh,如果您愿意。(这是您使用 -X 或 -I 的“取消提交”。)

于 2015-10-29T18:12:40.077 回答