2

Mercurial リポジトリには多数の XML ファイルがあります。これらのファイルの変更をあるブランチから別のブランチにマージすると、Mercurial は XML ファイルの一部がバイナリであると不平を言い、ファイルのローカル バージョンと他のバージョンのどちらかを選択するように求めます。

Mercurial は NULL バイトを含むファイルをバイナリと見なし、 XML ファイルの一部は UTF-16 としてエンコードされているため、多くの NULL バイトが含まれていることがわかりました 。私のデフォルトのマージ ツールは Beyond Compareで、UTF-16 でエンコードされたファイルを処理できます。Beyond Compare Web サイトで推奨されているように Mercurial を構成しましたが、マージ中に Mercurial は次のように言います。

ツール bcomp はバイナリを処理できません

何を与える? Mercurial が Beyond Compare でファイルをマージできないと考えるのはなぜですか?

4

1 に答える 1

5

Beyond Compare をマージ プログラムとして使用するための推奨 Mercurial 設定は次のようになります。

[merge-tools]
bcomp.executable = C:\Program Files\Beyond Compare 3\BComp.exe
bcomp.args = $local $other $base $output
bcomp.priority = 1
bcomp.premerge = True
bcomp.gui = True

[ui]
merge = bcomp

Mercurial docs on merge toolsによると、デフォルトのbinaryオプションがありFalseます。 の場合binary=True、ツールがバイナリ ファイルをマージできることを Mercurial に通知します。 しかし、このオプションをオンにしても、Mercurial は依然として Beyond Compare に XML ファイルをマージさせません。

もう少し調査すると、premergeオプションが見つかります。 の場合premerge=True、Mercurial は最初に内部的にマージし、解決すべき競合がある場合にのみマージ ツールを使用します。 残念ながら、Mercurial は常にバイナリ ファイルのマージに失敗します。事前マージが失敗すると、Mercurial はそのファイルのマージを停止し、マージ ツールを起動しません。

premerge解決策は、オプションを に設定することでもあるようFalseです。残念ながら、90% の確率で競合がなく、マージ ツールが表示されないため、事前マージは非常に役立ちます。premerge を に設定するとFalse、マージが必要になるたびに Beyond Compare が開きます。これは非常に面倒です。

これを解決するために、バイナリ ファイルのマージに使用される 2 つ目の Beyond Compare マージ ツール構成を作成しました。デフォルトのツールより優先度を低く設定したbcompので、メインbcompツールが失敗した場合にのみ呼び出されます。これは通常、バイナリ ファイルのみです。merge-toolsこれらの行をmercurial.ini ファイルのセクションに追加しました:

bcompbin.executable = C:\Program Files (x86)\Beyond Compare 3\BCompare.exe
bcompbin.args = $local $other $base $output
bcompbin.gui = True
bcompbin.premerge = False
bcompbin.binary = True

これの副作用の 1 つは、Beyond Compare が処理できないバイナリ ファイルをマージするために起動することです。私はまだそのような状況に遭遇したことがないので、対処方法がわかりません。bcompbinおそらく、マージ ツールを一時的にコメント アウトするだけです。

于 2011-08-19T00:54:41.180 に答える