5

拡張機能のqrefreshコマンドはMQ私には意味がありません。私の仮定を説明します:

  1. 特定のパッチを適用する必要があるリビジョンがわからない場合は、ほとんど価値がありません。リジェクトが何を意味するのかを理論的に知ることはできません。また、特定のリビジョンでリジェクトがなくても、リビジョン全体がコンパイルされるかどうかはわかりません。
  2. パッチ キューにqrefresh特定のパッチを追加すると、実際にはキュー内の次のパッチの親が失われます。したがって、あなたの介入がなければ、この次のパッチは役に立たない/役に立たないかもしれません.
  3. 次のパッチを修正するには.rej、ファイルを手動で編集するのではなく、マージすることをお勧めします。ツールが優れているという理由だけでなく、元qrefreshのパッチを使用していない場合は、より多くの情報が得qrefreshられ、パッチに加えた変更を意味のあるものにするために実際に必要な情報を失うことになります。

したがって、なぜこのコマンドを使用したいのかわかりません。

より良い代替手段は、すべてのパッチを適用してhg updateから、変更するパッチの親に適用し、次にhg revert作業ディレクトリを変更するパッチに適用することです。このパッチを変更し、新しいリビジョンにコミットしてから、他のすべてのパッチをこの新しいリビジョンにリベースします。

qrefresh単一のパッチのみを編集していない場合、いつ関連するのかわかりません。gitのアプローチ (ローカル ブランチにパッチを適用する) は、パッチ キューよりもはるかに理にかなっているようです。

私は正しいですか、リベースを使用したほうがよいですか? 見逃したものはありますか?

反応がなく視聴率が低いため、 kiln.se.comから移行しました

4

2 に答える 2

3

編集:以下の回答を書いた後、 Mercurial The Definitive Guide のパッチに関する章に出くわしました。それは多かれ少なかれ同じと言いますが、私の答えよりもはるかに詳細です。また、OPが探していたように、パッチを使用して3方向マージを使用する方法(私の好みでは少し複雑ですが、とにかく)も提案しています。

たぶん、mq はパッチのインポート ツールとしてのみ表示されますか? それは私の主な用途ではなく、qrefresh は非常に便利です。私にとっての典型的なユースケースは、公開されたリポジトリの上で作業しているときです。

私は通常、同時に書いている一連のパッチで作業します。まず、新しい空のパッチを作成します。いくつかの (a の一部の) 機能が終了したと思わqrefreshれる場合、パッチの作成時 (または最後) から行われたすべての変更を含めるためのトップ パッチを作成しますqrefresh。次に、新しい空のパッチを作成し、次のパッチに属するコードを書き続けます。

後で別のパッチに取り組んでいるときに、以前のパッチ内で行う必要がある変更を見つけた場合 (論理的には以前のパッチに属しているため)、トップ パッチに変更を加えたり、新しいパッチを作成したりしません。最初にqrefresh現在のパッチに移動し、次にqpop変更が属する前のパッチに移動して、変更を加えます。完了したらqrefresh、古いパッチを再度適用し、qpush作業していた場所に戻します。

このように作業すると、通常、マージは非常に簡単になり、qpopリジェクトやqpushing がほとんど発生しなくなります。

完全なパッチ シリーズを公開する準備ができたと確信したら、qfinishシリーズ全体を公開し、新しい空のパッチ スタックからやり直します。

リベースで同じようなことをすることは可能ですが、その場合は git interactive rebase のような機能が必要になります。

パッチを扱う上で重要なことは、パッチはまだコミットされていないため、簡単に変更できるということですqrefresh。まあ、新しいパッチを作成qfoldしてそれらを ing することで同じ結果を得ることができましたが、実際にはそれを行う意味はありません。1 つではなく 2 つのコマンドだけです。

現在、パッチが外部からの寄稿である場合、私のプロジェクトへの寄稿の主なメンテナは、寄稿者によって提供されたパッチから含まれており、リポジトリに直接到達することはありません。彼らはまず、メインのパッチ スタックに入ります。彼らが私が取り組んでいるプログラムの同じ部分に変更を加えると、拒否される可能性があります(基本的にまったく挿入しない場合、大混乱を招く可能性があります)。それらが現在変更されていないプログラムの他の部分に適用される場合、それらは基本的に問題なくマージされ、パッチスタックの任意の時点でインポートでき、特定のリビジョンにそれらを挿入する義務はありません。しかし、私は常に変更を読んでおり、寄贈されたコードをわずかに変更することがよくあります。次に、再び qrefresh を使用して、外部パッチを私が信じているものに更新します。

于 2010-11-09T13:12:41.097 に答える
0

あなたはクリスの答えを選ぶべきです、彼女はそれをすべて非常によく説明していますが、mercurialとgit、quiltの両方でパッチ管理機能に影響を与えたソフトウェアに関する論文があります:

http://www.suse.de/~agruen/quilt.pdf

于 2010-11-09T14:36:25.500 に答える