web-dev-qa-db-ja.com

WindowsでのGitDiffとMeld

MeldをWindows上のGitで動作させた人はいますか?私はそれを機能させようとしていますが、成功していません。

Meldをインストールしましたが、コマンドラインから2つのファイルをパラメーターとして呼び出すと、それらの差分が適切になるため、Meldが正しくインストールされます。ただし、Git(Git Diff)で動作させることはできません。 Gitのバージョンgit version 1.8.1.msysgit.1を使用しています。

私はいくつかのことを試しました:シェルスクリプトを作成しました、meld.sh

#!/bin/bash
meld.exe "$2" "$5"
echo $2
echo $5

そしてGitからそれを使用しました:

[diff]
    tool = meld

[difftool "meld"]
    cmd = \"D:\\meld.sh\"

私はそれを次のようなdifftoolとして追加しようとしました:

[diff]
    tool = meld

[difftool "meld"]
    cmd = \"C:\\Program Files (x86)\\Meld\\meld\\meld.exe\" 

またはこのように:

[diff]
    tool = meld

[difftool "meld"]
    cmd = '\"/c/Program Files (x86)/Meld/meld/meld.exe\" $PWD/$LOCAL $PWD/$BASE $PWD/$REMOTE --output=$PWD/$MERGED'

しかし、それは実際には機能していないようです。また、シェルスクリプトからsecond($ 2)およびfifth($ 5)パラメーターをエコーし​​ようとしましたが、出力されませんでした。また、いくつかの方法でバッチスクリプトを使用してみました。

meld.exe %2 %5

または

meld.exe %~2 %~5

しかし、実際には機能しません... Meldと比較するときにGitが使用する2つのバージョンのファイルを渡すにはどうすればよいですか?それはかなり迷惑です...

16
Jacob Krieg

通常、Windowsでは this Gist に似た例を見つけることができ、meld.exeはPATH)にあります。

git config --global merge.tool meld
git config --global mergetool.meld.cmd 'meld.exe \"$BASE\" \"$LOCAL\" \"$REMOTE\" \"$MERGED\"'

git config --global diff.tool meld
git config --global difftool.meld.cmd 'meld.exe \"$LOCAL\" \"$REMOTE\"'

より堅牢な設定は " Git mergetool with Meld on Windows "にありますが、考え方は同じです。


OPはコメントで報告します:

difftoolの場合、コマンドは.gitconfigに次の構成を書き込みます。

[diff]
  tool = meld
[difftool "meld"]
  cmd = meld.exe \\\"$LOCAL\\\" \\\"$REMOTE\\\"

私はそれらを次のように変更しました:

[diff]
  tool = meld
[difftool "meld"]
  cmd = meld.exe $LOCAL $REMOTE

そして、すべてがうまくいきました。

23
VonC

またはさらに良いことに、パスをだますことが許可されていないロックダウンされたシステムを使用している場合、またはパススペースを汚染したくない場合は、Meldへのフルパスを設定できます。

また、現在の作業コードのコピーを左側に表示することを好むため、$ REMOTE引数と$ LOCAL引数を交換しました。また、\から/への変換に注意し、二重引用符をエスケープしないでください。

[diff]
    tool = meld
[difftool "meld"]
    cmd = \"C:/Program Files (x86)/Meld/meld/meld.exe\" $REMOTE $LOCAL
4
mechsin

Windows 7(または他のバージョンのWindows)の場合は、これらの行を.gitconfigファイルに追加します。

[diff]

    tool = meld

[merge]

    tool = meld

[difftool "meld"]

    path = C:/Program Files (x86)/Meld/meld/meld.exe

[mergetool "meld"]

    path = C:/Program Files (x86)/Meld/meld/meld.exe

スペースが含まれている場合でも、パスに"を使用する必要はないことに注意してください。バックスラッシュの代わりにスラッシュを使用することを忘れないでください。

2
Rajeev

Gitkからdiffを呼び出すユーザー向けのもう1つのヒント(コンテキストメニュー項目を右クリックして"External Diff"):

上記の設定は、gitkの設定によって上書きされる場合があります。その場合は、gitkのメニューのツールを変更してください編集設定一般外部差分設定。

1
TingQian LI

git configを使用してパスを無効に設定しようとするいくつかのバリエーションを試しました。 Git BashコンソールウィンドウからMeldを使用したいので、パスをMeldディレクトリにエクスポートし、Bash Shellを再起動して、git difftool --tool-helpgit mergetool --tool-helpがMeldを認識し、私はそれを私の好みのツールとして選ぶことができます。

。profile

export PATH=/c/Program\ Files\ \(x86\)/Meld/:$PATH

。gitconfig

[merge]
    tool = meld
[diff]
    tool = meld
1
Cathy