Git mergetool với Meld trên Windows


93

Trong Linux, công cụ hợp nhất yêu thích của tôi là Meld và tôi không gặp vấn đề gì khi sử dụng hoặc cấu hình nó để hoạt động với Git. Tuy nhiên, trong Windows thì lại là một câu chuyện khác.

Đầu tiên, tôi đã cài đặt Meld từ một gói mà tôi tìm thấy ở đây: https://code.google.com/p/meld-installer/

Sau đó, tôi đã định cấu hình .gitconfig của mình như vậy để hỗ trợ Meld làm mergetool mặc định

[merge]                                                      
    tool = meld                                                                         

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

Vì vậy, khi tôi có xung đột, tôi thực hiện git difftool và trên thực tế Meld đã mở. Tuy nhiên, đường dẫn đến các tệp mà Git ghi để chuyển tới công cụ khác biệt là không chính xác. Ví dụ: mặc dù Git tạo các tệp BASE, LOCAL và REMOTE trong thư mục kho lưu trữ (vị trí mà tôi gọi là git mergetool từ đó), Meld vẫn cố gắng mở từng tệp đó trong thư mục của tệp thực thi.

Thay vì mở C: \ repo \ rose.txt.LOCAL.2760.txt, Meld cố gắng mở C: \ Program Files (x86) \ Meld \ meld \ rose.txt.LOCAL.2760.txt.

Có ai gặp phải vấn đề này trước đây hoặc biết cách cấu hình Git / Meld để hoạt động chính xác trong Windows không?


Tôi không biết liệu điều này có bất kỳ điểm nào đang được thử hay không, nhưng tôi sử dụng KDiff3 và đường dẫn được thiết lập trong gitconfig của tôi là: path = C: / Program Files (x86) /KDiff3/kdiff3.exe chứ không phải C: \\ vv
Fumler

1
Bạn có thể giải quyết vấn đề?
Roger

1
Tôi đã không thể. Một trong những câu trả lời có lẽ là đúng, nhưng tôi do dự để đánh dấu bất kỳ như vậy kể từ khi tôi không thể thực sự nhận được Meld cư xử đúng cách: - /
Nelson

@Nelson Đừng lo lắng, tôi cũng không thể :(
abergmeier 23/09/13

Vui lòng bình luận và bỏ phiếu cho vấn đề ngược dòng để người dùng trong tương lai thậm chí không cần phải lo lắng về điều này.
Franklin Yu

Câu trả lời:


151

Tại sao bạn không sử dụng git bash cho Windows?

Sau khi cài đặt meld chỉ cần:

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

Đó là tất cả!


Giải pháp này làm việc cho tôi, tôi cũng đã làm bên dưới lệnh để không nhắc tôi mỗi khi nó mở công cụ git config --global mergetool.prompt sai
Vineel Kovvuri

1
Giải pháp này phù hợp với tôi với Meld 3.16.2, cũng đã thêm git config --global mergetool.keepBackup false để xóa các bản sao lưu khó chịu đó.
Jay

2
đối với một số lý do, sau khi áp dụng giải pháp này tất cả mọi thứ xuất hiện như đỏ (thay đổi), và tôi đã phải làm điều này:git config --global mergetool.meld.cmd '"C:\Program Files (x86)\Meld\Meld.exe" $BASE $LOCAL $REMOTE -o $MERGED'
ihadanny

7
Với giải pháp này, tôi nhận được Cannot import: GTK+DLL load failed.
Juergen

4
@Juergen Câu trả lời cho điều này là có một sự không khớp về đường dẫn đang diễn ra. Nếu bạn sao chép libgirepository-1.0-1.dll có trong thư mục lib của bạn lên một thư mục (đó là cùng thư mục với Meld.exe) và bắt đầu, bạn sẽ thấy mọi thứ hoạt động,
demongolem

26

Schuess, hãy cẩn thận với ký tự khoảng trắng trong thư mục!

[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
Các chỉnh sửa đối với tôi dường như đã phá vỡ giải pháp. Bản sửa đổi ban đầu phù hợp với tôi, vì vậy hãy +1. Tôi đã tìm thấy nó dường như hoạt động mà không có đường dẫn.
vossad01

Điều này đã hiệu quả với tôi khi tôi sử dụng cmdmà không pathsử dụng dấu ngoặc kép thay vì dấu nháy đơn, dấu nháy đơn thay vì dấu nháy kép.
sq33G 30/07/18

Với Win10 1903 và WSL, tôi đã thử một loạt các cách tiếp cận cấu hình này và git không thể gọi meld. Tôi đã kết thúc symlinking Program_Files_x86 -> 'Program Files (x86)/'và sử dụng[mergetool "meld"] path = /mnt/c/Program_Files_x86/Meld/Meld.exe
Bill Hoag

10

Tôi cũng gặp phải vấn đề tương tự và thấy rằng mình phải làm việc thô bạo theo cách của mình để nó hoạt động. Đây là những gì tôi đã đưa vào tệp .gitconfig của mình. (Lưu ý rằng tệp thực thi meld của tôi ở một vị trí khác)

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

Chính xác là điều đó đã hoạt động tốt đối với tôi, với đường dẫn cài đặt tùy chỉnh mà tôi đã chọn. Cần lưu ý rằng có sự khác biệt giữa "đường dẫn", mà hầu hết các hướng dẫn sử dụng và "cmd" được chỉ định ở đây.
FauxFaux

Tôi đã thử cả giải pháp của bạn và của Martin nhưng đều không hiệu quả. Tôi nghĩ rằng có một cái gì đó khác đang xảy ra. Một cửa sổ mở ra và sau đó đóng lại ngay lập tức, sau đó Meld mở ra với các đường dẫn trỏ đến thư mục cài đặt của Meld thay vì repo. Một đối số được chuyển tới Meld có thể khiến nó chết và sau đó nó phát hiện ra vấn đề và khởi chạy lại với đường dẫn mặc định? Tôi nắm được ở đây nhưng tôi không chắc làm thế nào để khắc phục sự cố này ...
Nelson

Bạn chắc chắn rằng bạn đang sử dụng meld.exe chứ không phải tệp meld nằm trong (tôi nghĩ) một thư mục bin. Tôi nhớ đã gặp sự cố trong đó tôi chỉ sử dụng tệp meld và nó khởi chạy ứng dụng trước khi git có cơ hội đưa các tệp vào thư mục tạm thời.
schuess

Tôi đã sử dụng giải pháp của bạn, nhưng sử dụng meldtệp trong binthư mục (tôi thực sự đã đổi tên tệp meld.py) và nó hoạt động mà không có vấn đề gì.
Jarrett

7

Các cửa sổ:

Bạn có thể sử dụng hai lệnh này ( như Arugin nói ) - sử dụng đường dẫn thích hợp đến Meld.exe:

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

HOẶC bạn có thể chỉnh sửa C:\Users\YOUR_USER_NAME\.gitconfigtrực tiếp tệp của mình và thêm phần sau vào cuối tệp:

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

Bây giờ, hãy gọi git difftooltrong Git Bash cho Windows và Meld sẽ mở ra làm trình xem khuếch tán mặc định của bạn.


Linux:

CẬP NHẬT ngày 20 tháng 9 năm 2019:
- Tôi cũng có thể đặt phiên bản Linux ở đây để tôi tham khảo ở một nơi nếu không có gì khác:

Đối với Linux, nó cũng rất dễ dàng:

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

Sau đó thêm vào cuối tệp .gitconfig:

[diff]
    tool = meld

Đó là nó! git difftoolhiện hoạt động trên Linux Ubuntu!

Có liên quan:

  1. Tải xuống và cài đặt meld từ đây: https://meldmerge.org/
  2. Làm cách nào để Git sử dụng trình chỉnh sửa mà tôi chọn cho các cam kết?
  3. https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles

4

Tôi đã tìm thấy giải pháp trong một báo cáo lỗi trên trình cài đặt meld, trên trang này:

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

Theo như tôi hiểu, vấn đề là chương trình meld.exe (chạy meld thông qua trình thông dịch python) không cần thiết đặt thư mục làm việc của lệnh thành meld.exe. Điều này khiến các đường dẫn tương đối được diễn giải không chính xác khi được truyền dưới dạng đối số dòng lệnh.

Giải pháp là thay thế meld.exe được cung cấp bằng một được tạo bằng cách biên dịch tệp meld.ahk, sử dụng AHK2EXe (AutoHotKey script -> exe). Chỉ cần tải xuống tập lệnh ở phía dưới trang, vì đã có một vài phiên bản được đăng ở đó.


3
Trình theo dõi vấn đề không được thiết lập để tự động gán vấn đề cho tôi, vì vậy tôi đã bỏ lỡ rằng có nhận xét. Đối với những người tìm kiếm google sau này; Vấn đề này đã được cố định.
Keegan

4

Tôi cũng gặp phải vấn đề tương tự. Hệ điều hành được sử dụng là Windows 10 và những thay đổi sau đây đã phù hợp với tôi.

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

3

Vì một số lý do, trong Windows 10, biến môi trường PATH không thể được đặt chính xác trong quá trình cài đặt, do đó, một ngoại lệ kỳ lạ được đưa ra nói rằng nó không thể tìm thấy một số tệp .dll trong "C: \ Program Files (x86) / Thư mục Meld / bin ".

Một giải pháp cho tôi là, thực thi trong git bash:

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

Hoặc thêm vào cửa sổ PATH

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

2

Không có câu trả lời nào phù hợp với tôi. Tôi đã kết thúc với điều này trong tệp .gitconfig-file:

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

Sau khi git merge mybranchkết thúc có xung đột, bạn chỉ cần nhập git mergetoolvà kết hợp sẽ mở ra. Sau khi lưu, bạn phải cam kết trong git và các xung đột được giải quyết.

Vì một số lý do, điều này chỉ hoạt động với Meld 3.18.x, Meld 3.20.x cho tôi một lỗi.


0

Sau khi thử tất cả những điều trên, tôi đã đặt Meld chạy với tư cách quản trị viên.

  1. Nhấp chuột phải vào Meld.exe
  2. Đi tới Thuộc tính > Tương thích và chọn Run this program as an administratorhộp kiểm

Các lỗi tôi nhận được tham chiếu các file tạm như c:\windows\temp\meld-*, mà đã không được tạo ra. Nâng cao quyền của Meld dường như là một mẹo nhỏ vì nó hiện hoạt động với cả hai git difftoolvà chạy thủ công trong Meld.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.