Mercurial が cygwin で実行されている場合、 WinMergeを起動してマージの競合を解決する方法を理解するのは少し難しいです。これどうやってするの?
2 に答える
秘訣は、cygwin のパスは Windows のパスと同じではないため、引数として WinMerge に渡す前に、cygwin のパスを Windows のパスに変換する小さなスクリプトが必要です。
方法は次のとおりです。
(1) 以下のようにシェルスクリプトを作成し/usr/bin/winmerge
ます。
#!/bin/sh
"/cygdrive/c/Program Files/WinMerge/WinMergeU.EXE" /e /ub /dl other /dr local `cygpath -aw $1` `cygpath -aw $2` `cygpath -aw $3`
注:cygpath
はパス名を変換します。WinMerge がデフォルトの場所にない場合は、ここでパスを変更してください。
(2) そのファイルを実行可能にする
chmod +x /usr/bin/winmerge
~/.hgrc
(3) 以下をファイルに追加します。
[ui]
merge = winmerge
[merge-tools]
winmergeu.executable=/usr/bin/winmerge
winmergeu.args=$other $local $output
winmergeu.fixeol=True
winmergeu.checkchanged=True
winmergeu.gui=False
ノート!あなたの名前が入った [ui] セクションがすでにあるはずです。新しい [ui] セクションを追加するだけでなく、私の変更をあなたの変更とマージすることを忘れないでください。たとえば、私の .hgrc は次のようになります。
[ui]
username = Joel Spolsky <spolsky@example.com>
merge = winmergeu
[extensions]
fetch =
[merge-tools]
winmergeu.executable=/usr/bin/winmerge
winmergeu.args=$other $local $output
winmergeu.fixeol=True
winmergeu.checkchanged=True
winmergeu.gui=False
Subversion/cygwin/WinMerge で動作するシェル スクリプトの行を次に示します。主な違いは、使用する引数です。
/cygdrive/c/Program\ Files/WinMerge/WinMergeU.exe /e /ub /dl "$3" /dr "$5" "`cygpath -aw $6`" "`cygpath -aw $7`" &
この例では、すべての差分が一度に開始されるように、説明フィールドも設定し、バックグラウンドで比較を開始することに注意してください。それが気に入らない場合は、「&」を削除してください。
リビジョン管理プログラムが何を渡しているのかわからない場合は、シェル スクリプトに 'echo $@' を追加してみてください。スクリプトに渡された引数を出力します。