Windows에서 Meld와 Git mergetool


94

Linux에서 내가 가장 좋아하는 병합 도구는 Meld이며 Git에서 작동하도록 사용하거나 구성하는 데 문제가 없었습니다. 그러나 Windows에서는 다른 이야기였습니다.

먼저 https://code.google.com/p/meld-installer/ 에서 찾은 번들에서 Meld를 ​​설치했습니다.

그런 다음 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는 실행 파일의 디렉토리에서 각 파일을 열려고합니다.

C : \ repo \ roses.txt.LOCAL.2760.txt를 여는 대신 Meld는 C : \ Program Files (x86) \ Meld \ meld \ roses.txt.LOCAL.2760.txt를 열려고합니다.

누구든지 이전에이 문제를 겪었거나 Windows에서 올바르게 작동하도록 Git / Meld를 ​​구성하는 방법을 알고 있습니까?


이것이 시도되는 점이 있는지 모르겠지만 KDiff3을 사용하고 내 gitconfig에 설정된 경로는 다음과 같습니다 .path = C : / Program Files (x86) /KDiff3/kdiff3.exe 및 C : \\ 등
Fumler

1
문제를 해결할 수 있습니까?
Roger

1
나는 할 수 없었다. 답변 중 하나는 아마 정확하지만 실제로 융합이 제대로 작동하도록 얻을 수 없기 때문에 나는 등 어떤 표시를 주저 해요 : - /
넬슨

@Nelson 마 걱정하지 아니하며 :( I 수없는
abergmeier

향후 사용자가 이에 대해 걱정할 필요가 없도록 업스트림 문제에 댓글을 달고 투표 하십시오.
Franklin Yu

답변:


152

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

그게 다야!


1
이 솔루션은 저에게
효과적이었습니다

1
이 솔루션은 Meld 3.16.2에서 저에게 효과적이며 성가신 백업을 제거하기 위해 git config --global mergetool.keepBackup false를 추가했습니다.
Jay

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 이에 대한 대답은 경로 불일치가 진행되고 있다는 것입니다. lib 디렉토리에있는 libgirepository-1.0-1.dll을 한 디렉토리 위로 복사하고 (즉 Meld.exe와 같은 디렉토리) 시작하면 작동하는 것을 찾을 수 있습니다.
demongolem

26

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\"

1
수정 사항이 솔루션을 망친 것 같습니다. 원래 버전이 저에게 효과가 있으므로 +1. 나는 그것이 경로 선없이 작동하는 것처럼 보였습니다.
vossad01 2014 년

이것은 작은 따옴표 대신 백틱을 사용하고 슬래시-큰 따옴표 대신 작은 따옴표를 사용 cmd하지 않고 사용했을 때 저에게 path효과적이었습니다.
sq33G

Win10 1903 및 WSL을 사용하여 이러한 구성 접근 방식을 시도했지만 git은 meld를 호출 할 수 없습니다. 나는 심볼릭 링크 결국 Program_Files_x86 -> 'Program Files (x86)/'및 사용[mergetool "meld"] path = /mnt/c/Program_Files_x86/Meld/Meld.exe
빌 호그에게

10

나는 똑같은 문제가 있었고 그것이 작동하도록 내 방식대로 무차별 대입해야한다는 것을 알았습니다. 여기에 .gitconfig 파일에 넣은 내용이 있습니다. (내 meld 실행 파일은 다른 위치에 있습니다)

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

어쨌든 내가 고른 사용자 지정 설치 경로를 사용하면 정확하게 작동했습니다. 대부분의 가이드에서 사용하는 "path"와 여기에 지정된 "cmd"간에 차이가 있다는 점은 주목할 가치가 있습니다.
FauxFaux 2013

나는 당신과 Martin의 솔루션을 모두 시도했지만 둘 다 작동하지 않았습니다. 다른 일이 벌어지고 있다고 생각합니다. 창이 열리고 즉시 닫히면 Meld가 저장소 대신 Meld의 설치 디렉토리를 가리키는 경로로 열립니다. Meld에 전달 된 arg로 인해 죽을 수 있으며 문제를 감지하고 기본 경로로 다시 시작합니까? ...이 문제를 해결하는 방법을 여기 파악하고있어하지만 난 잘 모르겠어요
넬슨

bin 폴더에있는 meld 파일이 아닌 meld.exe를 사용하고 있는지 확인하십시오. 나는 단순히 meld 파일을 사용하고 git이 임시 폴더에 파일을 넣을 기회가 있기 전에 응용 프로그램을 시작하는 문제가 있었던 것을 기억합니다.
schuess

솔루션을 사용했지만 디렉토리 의 meld파일을 사용했으며 bin(실제로 파일 이름을 바꿨습니다 meld.py) 문제없이 작동했습니다.
Jarrett 2013

7

Windows :

Meld.exe에 대한 적절한 경로를 사용하여 다음 두 명령 ( 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 뷰어로 열립니다.


리눅스 :

2019 년 9 월 20 일 업데이트 :
-다른 것이 없다면 여기에 내 자신의 참조를 위해 Linux 버전도 넣을 수 있습니다.

Linux의 경우 매우 쉽습니다.

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

그런 다음 .gitconfig 파일의 맨 아래에 추가하십시오.

[diff]
    tool = meld

그게 다야! git difftool이제 Linux 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
이슈 트래커가 자동으로 이슈를 할당하도록 설정되지 않았기 때문에 댓글이 있다는 것을 놓쳤습니다. 나중에 이것을 찾는 Google 사용자를 위해; 이 문제가 수정되었습니다.
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 mergetool하고 멜 드가 열립니다. 저장 후 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 difftoolMeld 내에서 수동으로 실행되고 둘 다 작동하므로 트릭을 수행하는 것 같습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.