web-dev-qa-db-ja.com

Windows上のMeldを使用したGit mergetool

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はリポジトリディレクトリ(私はgit mergetoolを呼び出した場所)にBASE、LOCAL、およびREMOTEファイルを生成しますが、Meldは実行可能ファイルのディレクトリでこれらの各ファイルを開こうとします。

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

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

82
Nelson

なぜ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

それで全部です!

137
Arugin

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

[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'
25
Martin Dušek

私はまったく同じ問題を抱えていたので、それを機能させるために力ずくで強制する必要がありました。これが、私の.gitconfigファイルに入れたものです。 (私のmeld実行可能ファイルは別の場所にあることに注意してください)

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

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

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

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

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

4
star99ers

次の2つのコマンドを使用できます( Aruginの言うとおり )-Meld.exeへの適切なパスを使用します。

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 difftool Git Bash for WindowsおよびMeldで、デフォルトのdifftoolビューアーとして開きます。

4
Gabriel Staples

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

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

何らかの理由で、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
David L.

答えはどれも私には役に立たなかった。私はこれで.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 mergetoolと入力すると、meldが開きます。保存後、gitでコミットする必要があり、競合は解決されます。

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

2
Jeremy Benks

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

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

受け取ったエラーは、c:\windows\temp\meld-*などの一時ファイルを参照していましたが、作成されていませんでした。 Meldのアクセス許可を上げると、git difftoolとMeld内での手動実行の両方で機能するようになり、トリックを行うように見えます。

0
Drey