12

私は最近、MQ を使い始めました。変更セットが十分に洗練されるまで、分離されたパッチに取り組み、レポに影響を与えずにコミットするというアイデアが好きだからです。それ以前は、Mercurial のシェルフ拡張機能を使用していましたが、少し不安定でした。私がまだ MQ で理解しようとしているのは、パッチを互いに分離し、特定の順序で適用せず、異なるブランチ間で適用する方法です。これが私の通常の流れです -

1.新しいパッチの作業を開始します。

hg qnew fix-bug-1234 -m "fix bug 1234"
# do some work
hg qrefresh

2.作業する新しい機能/バグを取得します。

hg qpop fix-bug-1234
hg qnew some-feature -m "implement feature X"
# some work on feature X (perhaps in a different branch)
hg qrefresh

3.この時点で、バグ修正の作業に戻りたいと思います。機能の作業は脇に置きます。私はそれが次のように簡単だと思った:

hg qpop some-feature
hg qpush fix-bug-1234
# wrap up bug fix
hg qfinish fix-bug-1234
# get back to work on feature

ただし、MQ は常にシリーズで作成された最新のパッチを使用しているようで、使用している qpop/qpush コマンドに関係なく適用されます。私が作業しているファイルも完全に分離されていることに注意してください (ただし、同じ場合もあります)。

ここで何か不足していますか?これに使用hg qqueueする必要がありますか?ありがとう。

4

3 に答える 3

10

ガードを使用できます。ファイルを並べ替えることなくパッチの順序を維持し、パッチseriesのサブセットのみを選択的に適用することができます。

あなたの場合の例は次のとおりです。

hg qnew bugfix
# ..hack hack..
hg qrefresh
# want to switch over to working on some feature now
hg qpop
hg qnew feature
# ..hack hack..
hg qrefresh

この時点で、パッチがスタックのfeaturebugfixに来る状況にあります。これで、ガードを使用してどちらかを選択し、2 つを切り替えることができます。

hg qpop -a
hg qguard feature +featureguard
hg qguard bugfix +bugfixguard

取り組みたい場合feature

hg qselect featureguard
hg qpush
applying feature
now at: feature

取り組みたい場合bugfix

hg qpop -a
hg qselect bugfixguard
hg qpush
applying bugfix
now at: bugfix

ポジティブ ガード bugfixguardを選択したため、MQ は飛び越えてfeature(ポジティブ ガードが選択したものとは異なるため)、代わりにパッチを適用したことに注意してください(選択したbugfixガードと一致しました)。

ガードを操作する際に役立つツールにはhg qseries -v、 があり、ガードされた適用されていないパッチGの通常の代わりにが表示され、各パッチに関連付けられたガードが表示されます。Uhg qselect -l

于 2011-10-31T13:27:31.080 に答える
9
  1. 実行hg qpop -aして、スタックからすべてのパッチを削除します
  2. hg qpush --move some-patchパッチ スタック内でそれより前にある可能性のある他のパッチを適用せずに、「some-patch」を適用するために実行します。
于 2011-10-31T09:20:11.833 に答える
4

いいえ、あなたは何も見逃していません。このmq拡張機能は、パッチ キューが線形であるというかなり強い前提を置いています。マルチパッチの機能/修正を作成する場合はうまくいくqqueueでしょう...しかし、機能/修正が単一のパッチであり、他のパッチを適用せずに1つを適用できるようにしたい場合は、単に再適用する方が簡単かもしれません-arrange .hg/patches/series(パッチが適用される順序を保存します)。

私はシェルエイリアスを取得するのに十分なだけこれを行います(および手動編集パッチ):

alias viq='vim $(hg root)/.hg/patches/series'

または、複数のパッチを同時に適用しても構わない場合は、次を使用できますqgoto

$ hg qser
0 U bug-1234
1 U feature-4321
$ hg qgoto feature-4321
$ hg qser
0 A bug-1234
1 A feature-4321
于 2011-10-31T07:59:34.320 に答える