2

3way マージを行う必要がある場合の Mercurial の動作に関する Mercurial のドキュメント:

デフォルトでは、Mercurial は、外部ツールを使用する前に、テキスト ファイルに対して従来の 3 方向マージを内部的に実行しようとします。

外部ツールを呼び出す場合、それは常に「手動マージ」です。

すべてのマージ ツールが同じように作成されているわけではありません。私の選択したマージ ツール (Araxis Merge) は、多くの場合、mercurial の内部マージ ツールでは実行できなかった 3 つのファイルの自動マージを実行できます。

これは、大量のファイルが hg の内部の mergetool によってきれいにマージされ、その後、いくつかの他のファイルがきれいにマージされない可能性がある大きなマージのシナリオにつながりますが、hg がその mergetool を指定できる場合は可能です。コンテキストを何度も切り替える必要があるため、これは大きなマージを非常に非効率的にすることがわかりました: hg は私のマージツールをポップアップします。

ここで何かが欠けているのでしょうか、それとも、マージを自動的に試行するために hg がカスタム マージ ツールを使用できるようにする方法が本当にないのでしょうか。

4

2 に答える 2

1

自動マージできる場合、Araxis Merge を自動的に閉じるためのスイッチを探していると思います。コマンド ライン リファレンスとそのSCM 統合ドキュメントを見ましたが、実際にはどのスイッチになるかわかりません。自分で実験する必要があります。

Mercurial の観点からは、「手動マージ」などというものはありません。Mercurial は最初に内部でマージを試み (いわゆる「プレマージ」ステップ)、それが失敗した場合は外部ツールを探します。そのツールが存在し、終了コードがゼロ (正常終了) の場合、マージは完全に自動化されます。Mercurial はマージが成功したと見なし、次のファイルに進みます。ツールによっては、これにまったく気付かない場合があります。Mercurial はツールをバックグラウンドで実行するだけで、重大なマージ競合が発生した場合にのみアクションを求めるプロンプトが表示されます。

于 2012-04-16T14:15:02.493 に答える
0

Mercurialでカスタムマージツールを使用できます。 help merge-tools実行するツールが選択された順序を示します。

1. If a tool has been specified with the --tool option to merge or
   resolve, it is used.  If it is the name of a tool in the merge-tools
   configuration, its configuration is used. Otherwise the specified tool
   must be executable by the shell.
2. If the "HGMERGE" environment variable is present, its value is used and
   must be executable by the shell.
3. If the filename of the file to be merged matches any of the patterns in
   the merge-patterns configuration section, the first usable merge tool
   corresponding to a matching pattern is used. Here, binary capabilities
   of the merge tool are not considered.
4. If ui.merge is set it will be considered next. If the value is not the
   name of a configured tool, the specified value is used and must be
   executable by the shell. Otherwise the named tool is used if it is
   usable.
5. If any usable merge tools are present in the merge-tools configuration
   section, the one with the highest priority is used.
6. If a program named "hgmerge" can be found on the system, it is used -
   but it will by default not be used for symlinks and binary files.
7. If the file to be merged is not binary and is not a symlink, then
   "internal:merge" is used.
8. The merge of the file fails and must be resolved before commit.

詳細については、をご覧くださいhelp configmerge-toolsmerge-patterns

于 2012-04-10T16:01:59.467 に答える