如果我一直在编写代码并忘记创建补丁系列,我该怎么回顾性地创建补丁系列?到目前为止,唯一想到的是:
# 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
...
这种非常麻烦的方法也很危险。我可能会忘记-k
上的qdelete
,此时我会将我的前额撞到砖墙上几分钟,或者在qrecord操作过程中我可能会包含太多或太少。
有更好的方法吗?
(我真正想要的是能够在我想要拆分的补丁之前hg qpop
,并使用当前不存在的命令hg qunrecord
来交互式地吸收更改修补程序进入我的工作目录。一旦我对这些更改感到满意,hg qnew -f
可能会在旧版本面前挤出一个新补丁。)
答案 0 :(得分:6)
MQTutorial解释了如何拆分补丁。因此,您可以从当前工作中创建补丁并将其拆分为多个补丁。
答案 1 :(得分:2)
我认为crecord extension会让你这样做。它为您提供了一个基于交互式curses的界面,您可以在其中准确选择提交中的内容。
答案 2 :(得分:2)
TortoiseHg在“提交”对话框中具有非常有用的功能“Hunk Selection”,用于此类工作:
http://tortoisehg.bitbucket.io/manual/2.0/commit.html#change-selection
答案 3 :(得分: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.patch
和my$((i+1)).patch
之间,您可以使用hg shelve
/ hg unshelve
来测试项目是否构建并在my$i.patch
之上传递测试而不需要稍后更改!< / p>
如果您发现此阶段缺少某些内容,请对搁置的更改使用hg qref
,或对未经保留的更改使用hg qref -i
!
答案 4 :(得分: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命令。如果您不是诅咒粉丝,您仍然可以在此处执行所有相同的操作,只需将qcrefresh替换为hg qrefresh -X 're:.'
即可。如果您愿意,可以hg qrefresh -I aauuuuuggghhh
。 (它是你的&#34;取消承诺&#34;使用-X或-I。)