WindowsでのMeldを使用したGit mergetool


93

Linuxでは、私のお気に入りのマージツールはMeldであり、Gitで動作するように使用または構成することに問題はありませんでした。しかし、Windowsではそれは別の話になっています。

まず、ここで見つけたバンドルからMeldをインストールしました:https : //code.google.com/p/meld-installer/

次に、デフォルトのマージツールとしてMeldをサポートするように.gitconfigを構成しました

[merge]                                                      
    tool = meld                                                                         

[mergetool "meld"]                                           
    path = C:\\Program Files (x86)\\Meld\\meld\\meld.exe
    keepBackup = false                                   
    trustExitCode = false

したがって、競合が発生した場合は、git difftoolを実行すると、Meldが実際に開きます。ただし、Gitがdiffツールに渡すために書き込むファイルへのパスは正しくありません。たとえば、GitがBASE、LOCAL、およびREMOTEファイルをリポジトリディレクトリ(git mergetoolの呼び出し元の場所)に生成したとしても、Meldは実行可能ファイルのディレクトリでこれらの各ファイルを開こうとします。

MeldはC:\ repo \ roses.txt.LOCAL.2760.txtを開く代わりに、C:\ Program Files(x86)\ Meld \ meld \ roses.txt.LOCAL.2760.txtを開こうとします。

これまでに誰かがこれに遭遇したり、Windowsで正しく動作するようにGit / Meldを構成したりする方法を知っていますか?


これが試される意味があるかどうかはわかりませんが、私はKDiff3を使用しており、gitconfigで設定されたパスは次のとおりです。など
Fumler

1
問題を解決できますか?
ロジャー

1
できませんでした。答えの1つはおそらく正しいでしょうが、実際にMeldを適切に動作させることができないため、そのようにマークすることをためらっています:-/
Nelson

@ネルソン心配しないでください、私もできません:(
abergmeier '09 / 09/23

今後のユーザーがこれについて心配する必要がないように、コメントして上流の問題に投票してください。
フランクリンYu

回答:


151

Windowsでgit bashを使用しないのはなぜですか?

meldをインストールした後:

git config --global merge.tool meld
git config --global mergetool.meld.path "C:\Program Files (x86)\Meld\Meld.exe" <- path to meld here

それで全部です!


この解決策は私にとってはうまくいきましたツールgit config --global mergetool.prompt false
Vineel Kovvuri

1
このソリューションはMeld 3.16.2で動作し、厄介なバックアップを削除するためにgit config --global mergetool.keepBackup falseも追加しました。
ジェイ

2
何らかの理由で、適用した後に、このソリューションのすべてが(変更)赤として登場し、私はこれをしなければならなかった:git config --global mergetool.meld.cmd '"C:\Program Files (x86)\Meld\Meld.exe" $BASE $LOCAL $REMOTE -o $MERGED'
ihadanny

7
このソリューションでは、私はとを取得Cannot import: GTK+DLL load failedます。
Juergen、

4
@Juergenこれに対する答えは、進行中のパスの不一致があるということです。あなたは(Meld.exeと同じディレクトリにある)あなたのlibディレクトリの1ディレクトリアップであるlibgirepository-1.0-1.dllをコピーして起動した場合、あなたは、物事が働いて見つけるだろう
demongolem

26

シュース、ディレクトリのスペース文字に注意してください!

[merge]
    tool = meld
[mergetool "meld"]
    prompt = false
    keepBackup = false
    keepTemporaries = false
    path = C:/Program Files (x86)/Meld/Meld.exe
    cmd = \"/C/Program Files (x86)/Meld/Meld.exe\" \"$PWD/$LOCAL\" \"$PWD/$BASE\" \"$PWD/$REMOTE\" \"--output=$PWD/$MERGED\"

1
編集はソリューションを壊したように私には思えます。元のリビジョンは私のために働くので、+ 1。パスラインがなくても動作するようです。
vossad01 2014年

私が使用したとき、これは私のために働いたcmdことなく、pathバッククォートの代わりに、単一引用符、単一引用符の代わりに、スラッシュ、二重引用符と使用。
sq33G 2018

Win10 1903とWSLを使用して、これらの構成アプローチをいくつか試しましたが、gitがmeldを呼び出すことができませんでした。最終的にシンボリックリンクProgram_Files_x86 -> 'Program Files (x86)/'して使用しました[mergetool "meld"] path = /mnt/c/Program_Files_x86/Meld/Meld.exe
Bill Hoag

10

私はまったく同じ問題を抱えていて、それを機能させるために私は力ずくで自分の方法を使わなければならないことに気づきました。これが.gitconfigファイルに入れたものです。(私のmeld実行可能ファイルが別の場所にあることに注意してください)

[merge]
    tool = meld
[mergetool "meld"]
        cmd = "/c/Meld/meld/meld.exe $PWD/$LOCAL $PWD/$BASE $PWD/$REMOTE --output=$PWD/$MERGED"

とにかく私が選んだカスタムインストールパスを使用して、それはまったく問題なく動作しました。ほとんどのガイドで使用されている「パス」と、ここで指定されている「cmd」には違いがあることに注意してください。
FauxFaux 2013

私はあなたとマーティンの両方の解決策を試しましたが、どちらもうまくいきませんでした。他に何か起こっていると思います。ウィンドウが開いてすぐに閉じ、次にMeldが開き、リポジトリではなくMeldのインストールディレクトリを指すパスが表示されます。Meldに渡された引数が原因でそれが停止し、問題が検出されてデフォルトパスで再起動する可能性がありますか?私はここで把握していますが、これをトラブルシューティングする方法がわかりません...
ネルソン

binフォルダーにある(おそらく)meldファイルではなく、meld.exeを使用していることを確認します。meldファイルを単純に使用し、gitが一時フォルダーにファイルを配置する前にアプリケーションを起動するという問題があったことを覚えています。
2013

私はあなたの解決策を使用しmeldましたが、binディレクトリ内のファイルを使用して(実際にはファイルの名前を変更しましたmeld.py)、問題なく動作しました。
Jarrett、

7

ウィンドウズ:

Meld.exeへの適切なパスを使用して、次の2つのコマンドを使用できます(Aruginによると)。

git config --global merge.tool meld
git config --global mergetool.meld.path "C:\Program Files (x86)\Meld\Meld.exe"

または、C:\Users\YOUR_USER_NAME\.gitconfigファイルを直接編集して、ファイルの最後に以下を追加することもできます。

[merge]
  tool = meld
[mergetool "meld"]
  path = C:\\Program Files (x86)\\Meld\\Meld.exe

git difftoolWindows用のGit Bashを呼び出すと、Meldがデフォルトのdifftoolビューアとして開きます。


Linux:

2019年9月20日更新:-Linux
バージョンをここに置いて、自分の参照用に1か所にまとめることもできます。

Linuxの場合も非常に簡単です。

sudo apt update
sudo apt install meld
gedit ~/.gitconfig  # edit your ~/.gitconfig file (gedit GUI editor will open)

次に、.gitconfigファイルの最後に追加します。

[diff]
    tool = meld

それでおしまい!git difftoolLinux Ubuntuで動作するようになりました!

関連:

  1. ここからmeldをダウンロードしてインストールします:https : //meldmerge.org/
  2. 選択したエディターをGitでコミットに使用するにはどうすればよいですか?
  3. https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles

4

このページのmeldインストーラーのバグレポートで解決策を見つけました。

https://code.google.com/p/meld-installer/issues/detail?id=11

私が理解している限り、問題は、meld.exeプログラム(pythonインタープリターを介してmeldを実行する)が、コマンドの作業ディレクトリをmeld.exeの作業ディレクトリに不必要に設定することです。これにより、コマンドライン引数として渡されたときに相対パスが誤って解釈されます。

解決策は、提供されたmeld.exeを、AHK2EXe(AutoHotKeyスクリプト-> exe)を使用してmeld.ahkファイルをコンパイルすることによって生成されたものに置き換えることです。いくつかのバージョンが投稿されているので、ページの一番下にあるスクリプトをダウンロードしてください。


3
課題トラッカーは、課題を自動的に割り当てるように設定されていなかったため、コメントがあることを知りませんでした。これを後で見つけるグーグルの場合。この問題は修正されました。
Keegan 2013年

4

私も同様の問題に直面しました。使用されているオペレーティングシステムはWindows 10で、次の変更がうまくいきました。パスの問題のようです

git config --global mergetool.meld.path "/c/Program Files (x86)/Meld/Meld.exe" <- path to meld here

3

何らかの理由で、Windows 10ではインストール中にPATH環境変数を適切に設定できなかったため、「C:\ Program Files(x86)/」の下にある.dllが見つからないという奇妙な例外が発生しますMeld / bin "ディレクトリ。

私の回避策は、git bashで実行しました:

export PATH=$PATH:"/C/Program Files (x86)/Meld/lib" 

またはWindowsのPATHに追加

C:\Program Files (x86)/Meld/bin

2

答えはどれもうまくいきませんでした。私はこれを.gitconfig-fileに入れました:

[merge]
  tool = meld
[mergetool "meld"]
  cmd = 'C:/Program Files (x86)/Meld/Meld.exe' $LOCAL $BASE $REMOTE --output=$MERGED
[mergetool]
  prompt = false

git merge mybranchコンフリクトが終わった後、単にタイプすればgit mergetoolmeldが開きます。保存後、gitでコミットする必要があり、競合が解決されます。

何らかの理由で、これはMeld 3.18.xでのみ機能し、Meld 3.20.xではエラーが発生しました。


0

上記のすべてを試した後、管理者として実行するようにMeldを設定するとうまくいきました。

  1. Meld.exeを右クリック
  2. プロパティ > 互換性に移動し、Run this program as an administratorチェックボックスを選択します

受け取ったエラーc:\windows\temp\meld-*は、作成されていないのような一時ファイルを参照していました。Meldの権限を昇格させるとうまくいくようgit difftoolです。これはMeld内で手動と実行の両方で機能するためです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.