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 には、このような作業のために、コミット ダイアログに「ハンク選択」という非常に便利な機能があります

于 2010-01-26T06:20:45.010 に答える
2

crecord 拡張機能を使用すると、これが可能になると思います。コミットの内容を正確に選択できるインタラクティブなcursesベースのインターフェースを提供します。

于 2010-01-26T00:57:30.527 に答える
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 に答える