Hatena::Groupptech

ぷちてく RSSフィード

Archive
 
ProfileProfile

2012-12-24

.gitconfig+WinMergeでdiff/mergeよくなる設定

16:54

公式に(3pane-)3wayマージのドキュメントできてるので、見よう

2014-01-29 の v2.14.0-jp-29 で stableに取り込まれたから出来たっぽい


どーもこんちわ。時間取れないから不親切かもしれない。少しずつ足したり直したりしたし、する

Windows + msysgit 環境でWinMerge 使う方法、ぐぐると古いやり方しかなくて、英語圏含めてあまりに情報が無かったので前に書いた

で、git-difftool はいいけど「git-mergetool が動かねーよ」というTBがきたので手元で調べて直した。けど、いくつか問題を残してたから先のドキュメントまだ修正してない

ただ、割と言及とか参照数多くなってきてマズイ感じなので、とりあえずうまく動く設定さらす

~/.gitconfig

基本的には.gitconfigだけで動く。該当箇所抜き出して貼っておく

これはっつけて、$ git difftoolとか$ git mergetoolと打つだけでお手軽に作業できる

[core]
# less options moved to '.bashrc', see section of 'export'; e.g. 'export LESS=-qRiFM'
# TBD add '-F --quit-if-one-screen', '-X --no-init'(termcap), '-XXX --mark-wrong-char'
	pager = less

[merge]
	tool = WinMerge
[mergetool]
	prompt = false
[mergetool "WinMerge"]
	path = C:/Program Files/WinMerge/WinMergeU.exe
# TODO 3pane-3way
#	cmd = \"C:/Program Files/WinMerge/WinMergeU.exe\" \"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"
	cmd = \"C:/Program Files/WinMerge/WinMergeU.exe\" \"$MERGED\"
	trustExitCode = false

[diff]
	tool = WinMerge
	guitool = WinMerge
[difftool]
	prompt = false
# XXX unwork, as well 'git --no-pager ...' and 'GIT_PAGER=cat' on .bashrc
#     work => append 'pager = less -F' to [core] section
#	pager = false
[difftool "WinMerge"]
	path = C:/Program Files/WinMerge/WinMergeU.exe
#                                                                                             \"$LOCAL\" \"$BASE\"
	cmd = \"C:/Program Files/WinMerge/WinMergeU.exe\" -e -x -ub -wl -dl \"Base\" -dr \"Mine\" \"$LOCAL\" \"$REMOTE\"
	trustExitCode = false

~/.bashrc

後述するけど、lessの回避がうまくいかないので仕方なくここで-F足してる

## export
# c.f. https://github.com/seesaa/Git-for-Designers
#      http://www.linuxcertif.com/man/1/less/ja/
# q --quiet / --silent
# R --RAW-CONTROL-CHARS
# i --ignore-case (c.f. -p pattern)
# F --quit-if-one-screen
# M --LONG-PROMPT
export LESS=-qRiFM

lessのオプション詳細に知る必要あるけどコメント載せたので大体わかるとおもう

何がよいか

GUI使う上で意味ない点を改良した。diffの方もかなりラクになってる

  • ESCで閉じるように
  • ページャの回避。意味無い上にシェルに戻ったときに毎回qとか打つのは不毛
  • いちいち-yとするのはナンセンスなので常に-y入れないで済むように
  • 参照用ファイルに読み取り専用付けた
  • 「ExitCode信用するな」指定

他のサイトだと、ESCとか読み取り専用くらいしかやって無いと思う

課題

あと少しって感じだけど、検証してる時間がバカにならないから、なかなか直すいとまが無い

  • ページャをWinMergeするときだけ回避したい。今の方法は厳密に言うと回避じゃない
    • .gitconfig 単体で動くようにしたい。!付けて切ってやればできそうな気がしてる
  • WinMerge開きっぱなしで、タブの開閉だけで対応したい
    • たしかdiffでも、1ファイル開かれる→直して本体閉じる→次のファイル開かれる→ という挙動をする
    • WinMergeの設定によるかも
  • 3ペイン-3wayマージ

「3ペイン-3way」って用語、正しいかわからないけど他に思い浮かばない。ただの3-ペインマージじゃなくて、コンフリクト解消時のを指してる

最近出てきたdiff・mergeツールだとサクっと出来るけど、同じようなのが乱立しすぎてて選択に困る

一番困ってるのはgitでlessの回避が効かないこと。細かいとこはコメントのTODOから察してほしい

ヘルプファイル

こう書いてあって、3ペイン-3wayできなそうに読み取ってた

WinMerge[U] [/r] [/e] [/f filter] [/x] [/xq] [/s] [/ul] [/ur] [/um] [/u] [/wl] [/wr] [/wm] [/minimize] [/maximize] [/dl leftdesc] [/dr rightdesc] leftpath [middlepath] rightpath [/o outputpath]
WinMerge[U] conflictfile

...

mk:@MSITStore:C:\Program%20Files\WinMerge\Docs\WinMerge_ja.chm::/htmlhelp/Command_line.html

コンフリクト解消の場合は1ファイルしか受け付けないように見えるし、試してたときそんな挙動だった気がする。あと単純にWinMergeは3ペイン-3wayの情報がほとんどない

「動かないよ」と言及してくれたエントリ

時系列で。TB飛んできたのしか気づいてないので、他にあったら教えてほしい

それぞれの設定とかはリンク先でみてほしい

2ペインマージの修正

まず id:orangeclover さんが、「正しく動かんよ・・・」といってエントリあげてくれた

上のを受けてid:gsf_zero1 さんがあげてくれたのがこれ

基本的に同じ。p4merge を使った3ペイン-3wayマージっぽい設定が足された

3ペイン-3wayに成功したっぽい

@ (TAKANO Sho) さんが今日あげてくれた

まだチラ見しかしてない。画期的なのは3ペイン-3wayに、冗長だと思ってたpathがいらない(!)みたい

あとありがたいのは、違和感があって入れ替えようと思ってた$BASE, $REMOTEの指定で、それぞれ何を指してるかが書いてある。探したけど全然情報見つからなかった

[merge]
  tool = WinMerge
[mergetool "WinMerge"]
  cmd = \"C:/Standalone Programs/WinMerge/WinMergeU.exe\" //r //e //u //wl //wr \"$LOCAL\" \"$BASE\" \"$REMOTE\" //o \"$MERGED\"
https://gist.github.com/4371419

呪うならインストーラーのデフォルト設定呪おう

「直せよ」と思う人、ここはTBというレガシーなべんり機能あるから、より役立つTBブログ見るのをおすすめする


TBしてくれた方々 thx

vwkfjydeqyvwkfjydeqy2014/06/24 12:05dsrzcqufdi, <a href="http://www.yrctxzulng.com/">nznaeowsmx</a> , [url=http://www.nuheufbdts.com/]djngtlhnsz[/url], http://www.daigsmnkha.com/ nznaeowsmx

トラックバック - http://ptech.g.hatena.ne.jp/noromanba/20121224

Copylight (c) noromanba 2012-2017