[thg] mercurial で BASE OTHER が共通で LOCAL だけ倉曎されおいる行がコンフリクトずしお刀断されるのは正垞な動䜜なのでしょうか?

44 views
Skip to first unread message

ohira

unread,
Dec 28, 2017, 4:59:49 AM12/28/17
to mercurial-ja
い぀もお䞖話になっおおりたす。
おおひらです。

TortiseHg ず Winmergeを組み合わせおマヌゞを行なった堎合に other偎で䞀行倉曎しただけなのに
Winmergeの自動マヌゞに問題があるようで、
コンフリクトが倧量に発生するずいう珟象がありたした。(Winmergeによるマヌゞの堎合)

それで、hg でマヌゞを行いコンフリクトマヌカヌ付きの゜ヌスをWinmergeに枡すように
倉曎するこずで倉曎した䞀行だけがコンフリクト扱いになるこずを期埅したした。

やっおみるず、Winmergeでマヌゞした時のように倚くはないのですが、
コンフリクトするはずの行を含む連続した34行がコンフリクトの範囲に含たれる結果ずなりたした。


コンフリクトの刀断が、行単䜍で行われるものだずするず
人間の感芚ずしおは䞀行だけ怜出しおくれるず良さそうにおもうのですが。

mercurialのコンフリクトは耇数行にたたがっお、ひずかたたりで刀断されるこずがあるのでしょうか?

BASE ず OTHER の違いは、䞀行だけ(行の䞭倮郚分のキャラクタを削陀)(LOCALで行頭の空癜を䞀぀削陀した堎所の真ん䞭ぐらいの行です)
BASE ず LOCAL の違いは、先頭の文字列が始たるたでの空癜を䞀぀削陀(9個の空癜だったものを8個の空癜に倉曎)

#
Winmergeで芋るずBASEずOTHERで行頭の空癜は同じように芋えお実は違うのかもしれないず考えお
藀原さんが䜜成されたツヌル(shimplemerge)を䜿甚しおハッシュを確認したしたが、ハッシュは
コンフリクトしおいる33行(OTHERで倉曎した郚分をのぞく)でBASE OTHER共通でした。
コンフリクトしおいる郚分がLOCALで倉曎しおいる34行の真ん䞭ぐらいなので
党䜓がコンフリクトしおいるずいう刀断なのでしょうか。

ohira

unread,
Dec 28, 2017, 10:07:58 PM12/28/17
to mercurial-ja
おおひらです。

以䞋のような状況です。

...
...
...
(base other local 共通)
(base other 共通)(local 別) <---------- ここから
(base other 共通)(local 別)
(base other 共通)(local 別)
(base other 共通)(local 別)
(base 別)(other 別)(local 別)     (この行だけコンフリクトで良さそうな気がしたすが)
(base other 共通)(local 別)
(base other 共通)(local 別)
(base other 共通)(local 別)
(base other 共通)(local 別) <---------- ここたでがコンフリクトの察象
(base other local 共通)
...
...
...


simplemerge でハッシュ衚瀺しお、同じハッシュだけど厳密には行の内容違うずいう可胜性はあるのでしょうか?


2017幎12月28日朚曜日 18時59分49秒 UTC+9 ohira:

Katsunori FUJIWARA

unread,
Dec 29, 2017, 12:33:41 AM12/29/17
to mercurial-ja
藀原です。

2017幎12月29日 12:07 ohira <shin....@gmail.com>:

> おおひらです。
>
> 以䞋のような状況です。
>
> ...
> ...
> ...
> (base other local 共通)
> (base other 共通)(local 別) <---------- ここから
> (base other 共通)(local 別)
> (base other 共通)(local 別)
> (base other 共通)(local 別)
> (base 別)(other 別)(local 別) (この行だけコンフリクトで良さそうな気がしたすが)
> (base other 共通)(local 別)
> (base other 共通)(local 別)
> (base other 共通)(local 別)
> (base other 共通)(local 別) <---------- ここたでがコンフリクトの察象
> (base other local 共通)
> ...
> ...
> ...

䞊蚘の挙動は想定通りのものです。

Mercurial の builtin マヌゞ凊理 (= Python の暙準ラむブラリの挙動)
や、diff3 (GNU diffutils) 等の CUI 3-way マヌゞツヌルは、単玔に
「行ごずの文字列の䞀臎䞍䞀臎」で倉曎の有無を刀定しおいたす。

そのため、「local 偎の倉曎内容」 (= 䞊蚘䟋における「(base other 共
通)(local 別)」な行) が、「other にずっお劥圓な内容か吊か」を刀定
するこずができたせん。

衝突内容の曞き出しの際に、無理に衝突範囲を狭めるよりも、゚ンドナヌ
ザの刀断に任せる方が安党である、ずいうのは、劥圓な遞択だず思いたす。


おおひらさんの「この行だけコンフリクトで良さそうな気がしたすが」ず
いう感想も:

- local 偎の倉曎は、「先頭の文字列が始たるたでの空癜を䞀぀削陀」x35行
- other 偎の倉曎は、「行の䞭倮郚分のキャラクタを削陀」x1行

ずいう、「倉曎内容に察する理解」あっおのものだず思いたす。

もしもこれが「倉曎内容が䞍明」な 35 行 (local) + 1行 (other) だず
したら、「この行だけコンフリクトで良さそう」ずは思わないのではない
かず (笑)


このあたりの「内容を理解しおいる芖点で芋た堎合の、衝突怜出の冗長性」
の問題は、本 ML でも以前觊れたしたが、ファむル内容を理解できるマヌ
ゞ凊理、いわゆる semantic merge が可胜なツヌルが必芁でしょうね。


暫く前に、Windows 環境 C#, VB.net, Java, C 蚀語限定ではありたす
が、semantic merge を行う、その名もずばり SemanticMerge なるツヌル
の存圚を知りたした。

https://www.semanticmerge.com/

Mercurial 向け蚭定方法の説明もありたす。

https://users.semanticmerge.com/documentation/how-to-configure/semanticmerge-configuration-guide.shtml#HowtoconfigurewithMercurial

2.0 リリヌスでは、以䞋の察応が予定されおいるずのこずなので、導入が
芖野に入っおくる人も増えるのでは

- 動䜜環境に OSX/Linux が远加
- C++, Objective-C, JavaScript 察応


> simplemerge でハッシュ衚瀺しお、同じハッシュだけど厳密には行の内
> 容違うずいう可胜性はあるのでしょうか?
--
----------------------------------------------------------------------
FUJIWARA Katsunori(flying...@gmail.com)

ohira

unread,
Dec 29, 2017, 5:26:32 AM12/29/17
to mercurial-ja
おおひらです。

回答ありがずうございたす。

2017幎12月29日金曜日 14時33分41秒 UTC+9 FUJIWARA Katsunori:
藀原です。

2017幎12月29日 12:07 ohira <shin....@gmail.com>:

> おおひらです。
>
> 以䞋のような状況です。
>
> ...
> ...
> ...
> (base other local 共通)
> (base other 共通)(local 別) <---------- ここから
> (base other 共通)(local 別)
> (base other 共通)(local 別)
> (base other 共通)(local 別)
> (base 別)(other 別)(local 別)     (この行だけコンフリクトで良さそうな気がしたすが)
> (base other 共通)(local 別)
> (base other 共通)(local 別)
> (base other 共通)(local 別)
> (base other 共通)(local 別) <---------- ここたでがコンフリクトの察象
> (base other local 共通)
> ...
> ...
> ...

䞊蚘の挙動は想定通りのものです。
想定のものなのですね。
ありがずうございたす。

(自分はどういうこずか理解できおいたせんが)問題無い動䜜ずいうこずで安心いたしたした。

 

Mercurial の builtin マヌゞ凊理 (= Python の暙準ラむブラリの挙動)
や、diff3 (GNU diffutils) 等の CUI 3-way マヌゞツヌルは、単玔に
「行ごずの文字列の䞀臎䞍䞀臎」で倉曎の有無を刀定しおいたす。

そのため、「local 偎の倉曎内容」 (= 䞊蚘䟋における「(base other 共
通)(local 別)」な行) が、「other にずっお劥圓な内容か吊か」を刀定
するこずができたせん。

衝突内容の曞き出しの際に、無理に衝突範囲を狭めるよりも、゚ンドナヌ
ザの刀断に任せる方が安党である、ずいうのは、劥圓な遞択だず思いたす。


おおひらさんの「この行だけコンフリクトで良さそうな気がしたすが」ず
いう感想も:

  - local 偎の倉曎は、「先頭の文字列が始たるたでの空癜を䞀぀削陀」x35行
  - other 偎の倉曎は、「行の䞭倮郚分のキャラクタを削陀」x1行

ずいう、「倉曎内容に察する理解」あっおのものだず思いたす。
そうなんでしょうね。 

もしもこれが「倉曎内容が䞍明」な 35 行 (local) + 1行 (other) だず
したら、「この行だけコンフリクトで良さそう」ずは思わないのではない
かず (笑)
ここがわからないずころです、来幎たで考えおみたす。 


このあたりの「内容を理解しおいる芖点で芋た堎合の、衝突怜出の冗長性」
の問題は、本 ML でも以前觊れたしたが、ファむル内容を理解できるマヌ
ゞ凊理、いわゆる semantic merge が可胜なツヌルが必芁でしょうね。


暫く前に、Windows 環境 C#, VB.net, Java, C 蚀語限定ではありたす
が、semantic merge を行う、その名もずばり SemanticMerge なるツヌル
の存圚を知りたした。

    https://www.semanticmerge.com/

Mercurial 向け蚭定方法の説明もありたす。

    https://users.semanticmerge.com/documentation/how-to-configure/semanticmerge-configuration-guide.shtml#HowtoconfigurewithMercurial

2.0 リリヌスでは、以䞋の察応が予定されおいるずのこずなので、導入が
芖野に入っおくる人も増えるのでは

    - 動䜜環境に OSX/Linux が远加
    - C++, Objective-C, JavaScript 察応
かなり匷力なツヌルのようですね。
keep-merge3 に察応しおいるず良いのですが。 
Reply all
Reply to author
Forward
0 new messages