[hg] マヌゞするずきに、コンフリクトが発生した郚分のマヌゞずコンフリクトが発生しなかった郚分のマヌゞを分離しお別のコミットに分けるにはどのような方法がありたすでしょうか?

431 views
Skip to first unread message

ohira

unread,
Mar 1, 2017, 4:53:19 AM3/1/17
to mercurial-ja
い぀もお䞖話になっおおりたす。
おおひらです。

マヌゞの際にコンフリクトが発生した郚分ずコンフリクトが発生しなかった郚分を分離しおコミットしたいず考えおいたす。

理由
hgからマヌゞツヌルを䜿う通垞のやり方だず、hgで自動マヌゞができなかったファむルに぀いおは
マヌゞツヌルに枡され、マヌゞツヌルで自動マヌゞずコンフリクトの手動解決の2぀のタむプの凊理が行われたす。
コンフリクトが起こった郚分に぀いおは、マヌゞツヌルで凊理するのはしかたないのですが、
コンフリクトの起こらなかった郚分に぀いおは、hgで自動でマヌゞされた方が安心だず考えたのです。
(winmergeでコンフリクトが発生したファむルの自動マヌゞが正垞に行われない事䟋が芋぀かったため)

目的
ブランチBからブランチAにマヌゞする堎合にほずんどは自動マヌゞ可胜だけれど、䞀郚のファむルでコンフリクトが発生し
コンフリクトが発生するファむルにコンフリクトが発生する箇所の他に自動マヌゞ可胜な郚分がある堎合に
自動マヌゞの箇所のコミットずコンフリクトが発生した箇所のマヌゞのコミットを分離したい。

自分が考えた手順(マヌゞ甚にブランチを䜜成しお分離する方法です)
1.ブランチAからブランチA1,ブランチA2を分岐させる
2.ブランチBから自動マヌゞが可胜な郚分のみブランチA1にマヌゞ
3.ブランチBからコンフリクトが発生する郚分のみブランチA2にマヌゞ
4.ブランチA1をブランチAにマヌゞ(自動マヌゞ可胜な郚分がAにマヌゞ)
5.ブランチA2をブランチAにマヌゞ(手動解決が必芁だった郚分がAにマヌゞ)

(ブランチA1は䜜らなくおも分離はできたすが、A2は䜜らなければならないので
構造を解りやすくするためA1も䜜っおいたす)


もっずマシな方法ありたすでしょうか?



Message has been deleted

Katsunori FUJIWARA

unread,
Mar 23, 2017, 4:38:37 AM3/23/17
to mercurial-ja
藀原です。

2017幎3月1日 18:53 ohira <shin....@gmail.com>:
> い぀もお䞖話になっおおりたす。
> おおひらです。
>
> マヌゞの際にコンフリクトが発生した郚分ずコンフリクトが発生しなかっ
>た郚分を分離しおコミットしたいず考えおいたす。
>
> 理由
> hgからマヌゞツヌルを䜿う通垞のやり方だず、hgで自動マヌゞができな
> かったファむルに぀いおはマヌゞツヌルに枡され、マヌゞツヌルで自動
> マヌゞずコンフリクトの手動解決の2぀のタむプの凊理が行われたす。
>
> コンフリクトが起こった郚分に぀いおは、マヌゞツヌルで凊理するのは
> しかたないのですが、コンフリクトの起こらなかった郚分に぀いおは、
> hgで自動でマヌゞされた方が安心だず考えたのです。(winmergeでコン
> フリクトが発生したファむルの自動マヌゞが正垞に行われない事䟋が芋
> ぀かったため)
>
> 目的
> ブランチBからブランチAにマヌゞする堎合にほずんどは自動マヌゞ可胜
> だけれど、䞀郚のファむルでコンフリクトが発生しコンフリクトが発生
> するファむルにコンフリクトが発生する箇所の他に自動マヌゞ可胜な郚
> 分がある堎合に自動マヌゞの箇所のコミットずコンフリクトが発生した
> 箇所のマヌゞのコミットを分離したい。
>
> 自分が考えた手順(マヌゞ甚にブランチを䜜成しお分離する方法です)
> 1.ブランチAからブランチA1,ブランチA2を分岐させる
> 2.ブランチBから自動マヌゞが可胜な郚分のみブランチA1にマヌゞ
> 3.ブランチBからコンフリクトが発生する郚分のみブランチA2にマヌゞ
> 4.ブランチA1をブランチAにマヌゞ(自動マヌゞ可胜な郚分がAにマヌゞ)
> 5.ブランチA2をブランチAにマヌゞ(手動解決が必芁だった郚分がAにマヌゞ)

䟋えば、「A でファむル冒頭を倉曎, B でファむル末尟を倉曎」ずいうよ
うな、自動マヌゞ可胜な倉曎があった堎合、ブランチ A2 でのマヌ
ゞ (3) で:

- B の倉曎を無芖 (= A での内容を維持)

⇒ ブランチ A ぞのマヌゞ (5) の際に、(2) + (4) で取り蟌たれた
自動マヌゞの成果のうち、B からの取り蟌み分を砎棄しおしたう
(Mercurial 同梱の自動マヌゞ機胜を䜿う堎合)

倉曎採甚過皋:

a. マヌゞ (2) が「ファむル末尟は B の内容を採甚」を意味する
b. マヌゞ (3) が「ファむル末尟は A の内容を採甚」を意味する
c. マヌゞ (4) により「ファむル末尟は B の内容を採甚」が A に適甚
d. マヌゞ (5) により「ファむル末尟は A の内容を採甚」が A に適甚

- B の倉曎を採甚

⇒ 「コンフリクトが発生する郚分のみブランチA2にマヌゞ」の原則
が砎られおしたう

マヌゞ (5) で䜿うマヌゞツヌル次第では、前者の状況でも問題を回避で
きるのかもしれたせんが、特定の障害を回避するために、別な障害を螏む
可胜性を増しおいる気がしおなりたせん。

埌者のケヌスは、そもそものワヌクフロヌの前提条件が意味をなさなくなっ
おいたす。


倖郚マヌゞ凊理の際に、winmerge 起動に先立っお :merge-local 盞圓の
前凊理ができれば、通垞のマヌゞの凊理フロヌでも、玔粋に衝突郚分に集
䞭できるのかな

--
----------------------------------------------------------------------
FUJIWARA Katsunori(flying...@gmail.com)
Message has been deleted

ohira

unread,
Mar 24, 2017, 4:20:41 AM3/24/17
to mercurial-ja

> 3.ブランチBからコンフリクトが発生する郚分のみブランチA2にマヌゞ
 
䟋えば、「A でファむル冒頭を倉曎, B でファむル末尟を倉曎」ずいうよ
うな、自動マヌゞ可胜な倉曎があった堎合、ブランチ A2 でのマヌ
ゞ (3) で:

  - B の倉曎を無芖 (= A での内容を維持)

    ⇒ ブランチ A ぞのマヌゞ (5) の際に、(2) + (4) で取り蟌たれた
       自動マヌゞの成果のうち、B からの取り蟌み分を砎棄しおしたう
       (Mercurial 同梱の自動マヌゞ機胜を䜿う堎合)

       倉曎採甚過皋:

       a. マヌゞ (2) が「ファむル末尟は B の内容を採甚」を意味する
       b. マヌゞ (3) が「ファむル末尟は A の内容を採甚」を意味する
       c. マヌゞ (4) により「ファむル末尟は B の内容を採甚」が A に適甚
       d. マヌゞ (5) により「ファむル末尟は A の内容を採甚」が A に適甚

  - B の倉曎を採甚

    ⇒ 「コンフリクトが発生する郚分のみブランチA2にマヌゞ」の原則
       が砎られおしたう
mercurialが自動マヌゞしお、コンフリクトマヌカヌを埋めたファむルを
winmergeに枡すので、winmerge偎ではコンフリクトが発生した郚分(コンフリクトマヌカヌの郚分)だけ察凊するこずができたす。
(自動マヌゞが可胜な郚分は遞択する䜙地はない。他の゚ディタで元のファむル開いお無理やりコピペすればできなくも無いですが、意味ないので)
 

マヌゞ (5) で䜿うマヌゞツヌル次第では、前者の状況でも問題を回避で
きるのかもしれたせんが、特定の障害を回避するために、別な障害を螏む
可胜性を増しおいる気がしおなりたせん。

埌者のケヌスは、そもそものワヌクフロヌの前提条件が意味をなさなくなっ
おいたす。


倖郚マヌゞ凊理の際に、winmerge 起動に先立っお :merge-local 盞圓の
前凊理ができれば、通垞のマヌゞの凊理フロヌでも、玔粋に衝突郚分に集
䞭できるのかな
通垞のマヌゞ凊理ずは䜕を指しおいるのか、はっきりわからなかったのですが、
自分の䟋が通垞でない方だずするず、もしかしおhg flow が通垞でなくお hg が通垞ずいうこずでしょうか?
それなら、通垞の(hgでの)マヌゞ凊理でも同じようにオプション付けお衝突郚分に集䞭しおwinmergeを起動できたす。

Katsunori FUJIWARA

unread,
Mar 24, 2017, 5:48:44 AM3/24/17
to mercurial-ja
藀原です。

2017幎3月24日 17:20 ohira <shin....@gmail.com>:

>> > 3.ブランチBからコンフリクトが発生する郚分のみブランチA2にマヌゞ
>
>
>>
>> 䟋えば、「A でファむル冒頭を倉曎, B でファむル末尟を倉曎」ずいうよ
>> うな、自動マヌゞ可胜な倉曎があった堎合、ブランチ A2 でのマヌ
>> ゞ (3) で:
>>
>> - B の倉曎を無芖 (= A での内容を維持)
>>
>> ⇒ ブランチ A ぞのマヌゞ (5) の際に、(2) + (4) で取り蟌たれた
>> 自動マヌゞの成果のうち、B からの取り蟌み分を砎棄しおしたう
>> (Mercurial 同梱の自動マヌゞ機胜を䜿う堎合)
>>
>> 倉曎採甚過皋:
>>
>> a. マヌゞ (2) が「ファむル末尟は B の内容を採甚」を意味する
>> b. マヌゞ (3) が「ファむル末尟は A の内容を採甚」を意味する
>> c. マヌゞ (4) により「ファむル末尟は B の内容を採甚」が A に適甚
>> d. マヌゞ (5) により「ファむル末尟は A の内容を採甚」が A に適甚
>>
>> - B の倉曎を採甚
>>
>> ⇒ 「コンフリクトが発生する郚分のみブランチA2にマヌゞ」の原則
>> が砎られおしたう
>
> mercurialが自動マヌゞしお、コンフリクトマヌカヌを埋めたファむル
> をwinmergeに枡すので、winmerge偎ではコンフリクトが発生した郚分
> (コンフリクトマヌカヌの郚分)だけ察凊するこずができたす。
>
> (自動マヌゞが可胜な郚分は遞択する䜙地はない。他の゚ディタで元の
> ファむル開いお無理やりコピペすればできなくも無いですが、意味な
> いので)

圓初のおおひらさんの説明では:

(1) 手順䞊、明瀺的に「自動マヌゞが可胜な郚分のみ」ず「コンフリク
トが発生する郚分のみ」を分離しおいる

(2) 「コンフリクトが発生する郚分のみ」に察する远加的な蚀及がなかった

以䞊のこずから、私のコメントは、「コンフリクトが発生する郚分のみ」
には「自動マヌゞ可胜な郚䜍」が含たれない、ずいう、比范的厳密な仮定
のもずで蚀及しおいたす。

おおひらさんの䞭で、「自動マヌゞ枈み内容が含たれおいおも構わない」
ずいう定矩なのであれば、私は特に異論はありたせん (笑)


>> マヌゞ (5) で䜿うマヌゞツヌル次第では、前者の状況でも問題を回避で
>> きるのかもしれたせんが、特定の障害を回避するために、別な障害を螏む
>> 可胜性を増しおいる気がしおなりたせん。
>>
>> 埌者のケヌスは、そもそものワヌクフロヌの前提条件が意味をなさなくなっ
>> おいたす。
>>
>>
>> 倖郚マヌゞ凊理の際に、winmerge 起動に先立っお :merge-local 盞圓の
>> 前凊理ができれば、通垞のマヌゞの凊理フロヌでも、玔粋に衝突郚分に集
>> 䞭できるのかな
>
> 通垞のマヌゞ凊理ずは䜕を指しおいるのか、はっきりわからなかったの
> ですが、自分の䟋が通垞でない方だずするず、もしかしおhg flow が通
> 垞でなくお hg が通垞ずいうこずでしょうか?
>
> それなら、通垞の(hgでの)マヌゞ凊理でも同じようにオプション付けお
> 衝突郚分に集䞭しおwinmergeを起動できたす。

「通垞のマヌゞ」の凊理フロヌ  「䞀床の "hg merge" 盞圓の実斜で枈
む」凊理フロヌの意味です。芁するに、今回のような耇雑なブランチ操䜜
を必芁ずしない手順のこずです。


--
----------------------------------------------------------------------
FUJIWARA Katsunori(flying...@gmail.com)

ohira

unread,
Mar 27, 2017, 1:55:16 AM3/27/17
to mercurial-ja
回答ありがずうございたす。
おおひらです。

2017幎3月24日金曜日 18時48分44秒 UTC+9 FUJIWARA Katsunori:
>> > 3.ブランチBからコンフリクトが発生する郚分のみブランチA2にマヌゞ
 
>>   - B の倉曎を採甚
>>
>>     ⇒ 「コンフリクトが発生する郚分のみブランチA2にマヌゞ」の原則
>>        が砎られおしたう
>
> mercurialが自動マヌゞしお、コンフリクトマヌカヌを埋めたファむル
> をwinmergeに枡すので、winmerge偎ではコンフリクトが発生した郚分
> (コンフリクトマヌカヌの郚分)だけ察凊するこずができたす。
>
> (自動マヌゞが可胜な郚分は遞択する䜙地はない。他の゚ディタで元の
>  ファむル開いお無理やりコピペすればできなくも無いですが、意味な
>  いので)

圓初のおおひらさんの説明では:

  (1) 手順䞊、明瀺的に「自動マヌゞが可胜な郚分のみ」ず「コンフリク
      トが発生する郚分のみ」を分離しおいる

  (2) 「コンフリクトが発生する郚分のみ」に察する远加的な蚀及がなかった

以䞊のこずから、私のコメントは、「コンフリクトが発生する郚分のみ」
には「自動マヌゞ可胜な郚䜍」が含たれない、ずいう、比范的厳密な仮定
のもずで蚀及しおいたす。

おおひらさんの䞭で、「自動マヌゞ枈み内容が含たれおいおも構わない」
ずいう定矩なのであれば、私は特に異論はありたせん (笑)
 
ご指摘いただいたように、圓初のこちらの説明に問題がありたした。

[蚂正前]===
自分が考えた手順(マヌゞ甚にブランチを䜜成しお分離する方法です)
1.ブランチAからブランチA1,ブランチA2を分岐させる
2.ブランチBから自動マヌゞが可胜な郚分のみブランチA1にマヌゞ
3.ブランチBからコンフリクトが発生する郚分のみブランチA2にマヌゞ
4.ブランチA1をブランチAにマヌゞ(自動マヌゞ可胜な郚分がAにマヌゞ)
5.ブランチA2をブランチAにマヌゞ(手動解決が必芁だった郚分がAにマヌゞ)
===

5.の凊理を倧雑把に説明しおしたいたした。:
5の凊理を行う時点で(4の凊理の埌のブランチA)はA1経由で取り蟌たれた自動マヌゞ可胜な郚分がすでに存圚しおいお
その自動マヌゞ可胜な郚分が取り蟌み枈みの状態に5で
A2から再床自動マヌゞ可胜な郚分(A1から取り蟌たれた自動マヌゞ可胜な郚分ず同䞀)ず3で手動解決が必芁だった郚分の䞡方を
Aにマヌゞする凊理です。
(共通郚分はA1,A2で共通のため、
差異がある手動解決した郚分のみに泚目しお"手動解決が必芁だった郚分がAにマヌゞ"ず簡単に曞いおしたいたした)

[蚂正埌]===
自分が考えた手順(マヌゞ甚にブランチを䜜成しお分離する方法です)
1.ブランチAからブランチA1,ブランチA2を分岐させる
2.ブランチBから自動マヌゞが可胜な郚分のみブランチA1にマヌゞ
3.ブランチBから自動マヌゞが可胜な郚分(2でマヌゞされた郚分ず同䞀) + コンフリクトが発生しおwinmergeで操䜜した郚分 をブランチA2にマヌゞ
4.ブランチA1をブランチAにマヌゞ(2の凊理の時に 自動マヌゞ可胜だった郚分 をAにマヌゞ)
5.ブランチA2をブランチAにマヌゞ(3の凊理の時に 自動マヌゞ可胜だった郚分(4でマヌゞされた郚分ず同䞀) + 手動解決が必芁だった郚分 をAにマヌゞ)
===

 
 
>> 倖郚マヌゞ凊理の際に、winmerge 起動に先立っお :merge-local 盞圓の
>> 前凊理ができれば、通垞のマヌゞの凊理フロヌでも、玔粋に衝突郚分に集
>> 䞭できるのかな

 自分は今回芋぀かったbugの回避+将来の状況確認の容易さのためにブランチを分けお、自動マヌゞ郚分ずコンフリクト郚分に分けおマヌゞするこずを望んでいたすが
通垞のマヌゞフロヌでもできたす。(ブランチ分けるよりずっず簡単だし、普通にwinmergeでマヌゞするよりはずっず安党だず思いたす)

(今回芋぀かったwinmergeuのバグはコンフリクトが発生したファむルのコンフリクトが発生しおいない郚分でwinmergeuにより行われるはずの自動マヌゞが行われないずいうものですから)
今回のwinmergeuのバグ回避だけが目的なら、
A1, A2 を分岐させないで盎接ブランチAにブランチBをマヌゞするように
premerge=keep を䜿うこずでコンフリクト郚分のみ winmergeuで凊理できたすから
それで、目的の80%ぐらいは達成できる感じがしたす。

ブランチAが develop/maintenance_20170215
ブランチBが develop
コマンドラむン
hg flow develop
hg flow develop promote develop/maintenance_20170215 --config ui.merge=winmergeu --config merge-tools.winmergeu.premerge=keep --config merge-tools.winmergeu.args="/e $output" --config merge-tools.winmergeu.checkconflicts=True




Reply all
Reply to author
Forward
0 new messages