あなたが何をしたいのか正確にはわかりません。推測なので間違っていたらごめんなさい。
まず、ほとんどすべてのマージ ツールは、マージを実行するために 2 つまたは 3 つのファイルを必要とします。これが、これらのツールの設計方法です。競合マーカーを含むファイルを直接操作するツールは非常にまれです。ただし、これは、これを行うツールの選択次第です。それが必要な場合、Mercurial と kdiff3 は役に立ちません。別のツールが必要になります。
次に、マージ ツールがどのように構成されているかを詳しく見てみましょう。hg help mergetools
使用可能なマージ ツールのリストとその選択方法、およびhg help config.merge-tools
(ダッシュに注意してください) 必要な構成パラメーターを確認できます。次のようにして、kdiff3 の設定を確認できます。
hg config merge-tools | grep -w kdiff3
デフォルトでは、merge-tools.kdiff3.premerge
設定すべきではないため、hg merge
最初に内部マージ アルゴリズムを使用して競合を解決しようとし、競合なしに解決できないファイルに対してのみ kdiff3 (マージ ツールとして選択したと仮定) にフォールバックします。kdiff3 がどのように呼び出されるかは、次のようにして確認できます。
hg config merge-tools.kdiff3.args
ここでのデフォルトは、すでにあなたが望むものにかなり近いはずです. ここで、kdiff3 をデフォルトで起動したくないが、kdiff3 がいつ呼び出されるかを制御したい、と想定しています。
競合が発生した場合にデフォルトでマージ ツールにダンプされたくない場合にできることは、最初に内部ツールの 1 つを使用してマージすることです:merge
。:merge3
、または:fail
。:merge
またはは、内部的にマージ:merge3
できないファイルに競合マーカーを配置し、マージできるファイルを解決済みとしてマークし、残りを未解決としてマークします。マージ ツールは、競合が解決でき:fail
たとしても、両側に変更があるすべてのファイルを未解決としてマークします(競合マーカーは追加されません)。これは、たとえば次の方法で実行できます。
hg merge --tool :merge
この時点で、Mercurial の内部マージ ツールが解決できた競合と、解決できなかった競合があります (hg resolve -l
状態を確認するかhg resolve -l -T '{ifeq(status,"U","{path}\n","")}'
、未解決のファイルを一覧表示するだけです)。
その後、 を呼び出しhg resolve --tool kdiff3 FILE
て ( --tool kdiff3
kdiff3 がデフォルトのマージ ツールである場合はオプションを省略できます)、 の競合を解決できますFILE
。Mercurial は、マージ ツールを呼び出す前に、ローカル、ベース、およびその他のリビジョンを生成します。このプロセスの一環として、ローカル ファイル内の競合マーカーは消去されます。これは、そのファイルが作業ディレクトリの最初の親の新しいコピーに置き換えられるためです。