藤原です。
BeyondCompare の機能一覧を見る限りでは、ファイル内容の意味を解釈
した上でのいわゆる semantic merge ではなく、Mercurial 組み込みの
マージツールや WinMerge と同様の文字列ベースでのマージのように見
受けられます。
https://www.scootersoftware.com/features.php?zz=features_list
ざっと見た限りで怪しそうなのは、 以下の差分に関して無視す
る "Ignore unimportant differences" なる機能とか、
"Ignore replaced text and renamed identifiers" なる機能あたりでしょ
うか。
- Comments
- Whitespace
- Delimited strings
- Regular expressions
- Character case
- Page headers
- Columns
- Line terminator style
- Manually ignore selection
ファイル内容の判定は、拡張子や冒頭行の "#!" 記述、言語固有キーワー
ド等を用いた簡易判定なのだと思いますから、対象言語判定の誤認によっ
て、本来は重要な差分が無視可能扱いになってしまっている可能性はあ
ります。
なお、外部マージツールを使用する場合、デフォルトで premerge が有効
(= 内部マージツールでマージ成功なら外部マージツール起動は省略) に
なっていますが、そちらの環境での BeyondCompare4 の設定&発生して
いる問題は以下のいずれになるでしょうか?
a. premerge = true のままなので、内部マージツールでの衝突検出時のみ
BeyondCompare4 を適用
a-1: BeyondCompare4 が衝突箇所に対する処理結果が想定外の内容
a-2: BeyondCompare4 が衝突箇所「以外」に対する処理結果が想定外の内容
b. premerge = false に設定することで、マージでは常に
BeyondCompare4 を適用
b-1: 衝突発生時に BeyondCompare4 のマージ結果が想定外の内容
b-2: 衝突「非」発生時に BeyondCompare4 のマージ結果が想定外の内容
相談内容での言及的には b-2 のケースではないかと推測しているのです
が、この認識で合ってますか?
安全性を考慮しつつ、BeyondCompare4 の適用結果を評価するのであれば、
外部マージツールとして、以下のような処理を行うスクリプト/バッチ
ファイルを使用するという手も (BeyondCopmare4 に関してはあまり厳密
に確認せずに書いてますので、仕様上実現できないかもしれませんが……)
1. Mercurial 組み込みのマージツールでマージ
マージ結果は一時ファイル (A) に書き出す。
衝突の有無 (= 終了コード) も記憶しておく。
以前実装した以下のエクステンションを使うことで、外部のマージ
ツールとして使用できる筈 (最新版の Mercurial で稼働可能かは
未確認ですが……)
https://bitbucket.org/foozy/hgext-simplemerge/src/default/
2. BeyondCompare4 で「非」対話的にマージ ("/automerge" + "/force" ?)
マージ結果は一時ファイル (B) に書き出す。
衝突の有無 (= 終了コード) も記憶しておく。
3. マージ方法で衝突検出結果が異なる場合はエラー終了 (= 衝突未解消扱い)
4. いずれのマージでも衝突が確認された場合は、BeyondCompare4 で
対話的にマージ
念の為一時ファイル (A) も別途表示した方が良い?
マージが完了したら、スクリプトは終了。
5. いずれのマージでも衝突が検出されなかった場合は、一時ファイル (A)/(B) を比較
5-1. 不一致ならエラー終了 (= 衝突未解消扱い)
5-2. 一致なら本来の結果書き出し先にマージ結果をコピーして終了
ちなみに、 BeyondComapre の特徴として、フォルダ同士の比較を行う際
に、最終更新日やファイルサイズ等の一部の情報の一致をもって「変更
なし」とみなす "Flexible comparison criteria" なるものが挙げられ
ていました (おそらく実行速度重視なケース向けでしょう)。
デフォルトでこれらが有効化されているかは未確認ですが、extdiff エ
クステンションとの併用で複数ファイルの差分出力 (= フォルダ間比較)
をした場合、これらが有効だと差分の見逃しが発生する可能性はありそ
うですね。
2019年8月1日(木) 10:19 ohira <
shin....@gmail.com>:
>
> いつもお世話になっております。
> おおひらです。
>
> マージツールとしてbeyondcompare4を指定した場合 mercurial本体でマージすれば問題がない部分で問題が発生し
> マージされるべき変更内容が一部消えてしまうことがわかりました。
>
> 回避策としては、beyondcompare4 でのマージをやめて
> keep-merge3でwinmerge を使うことです。
>
>
> マージ時に修正されるファイルや数英箇所が多いため全ての修正が正しくマージされたかを
> いちいち確認することができない場合に、不正なマージを見つけるのに良い方法ありませんでしょうか?
>
> merge = beyondcompare4 NG
>
> winmergeu.premerge=keep-merge3 OK
>
> --
> from Mercurial 日本語コミュニティ <
mercur...@googlegroups.com>
> ※ ヘルプ表示は
http://groups.google.com/group/mercurial-ja?hl=ja
> ---
> このメールは Google グループのグループ「mercurial-ja」に登録しているユーザーに送られています。
> このグループから退会し、グループからのメールの配信を停止するには
mercurial-ja...@googlegroups.com にメールを送信してください。
> このディスカッションをウェブ上で閲覧するには
https://groups.google.com/d/msgid/mercurial-ja/d9e4e453-5645-41d2-aa83-9fb155317cd7%40googlegroups.com にアクセスしてください。
--
----------------------------------------------------------------------
FUJIWARA Katsunori(
flying...@gmail.com)