Git mergetool dengan Meld di Windows

94

Di Linux, alat penggabung favorit saya adalah Meld, dan saya tidak memiliki masalah dalam menggunakan atau mengkonfigurasinya untuk bekerja dengan Git. Namun, di Windows, ceritanya berbeda.

Pertama, saya menginstal Meld dari bundel yang saya temukan di sini: https://code.google.com/p/meld-installer/

Kemudian, saya mengkonfigurasi .gitconfig saya seperti itu untuk mendukung Meld sebagai mergetool default

[merge]                                                      
    tool = meld                                                                         

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

Jadi, ketika saya mengalami konflik, saya melakukan git difftool dan Meld sebenarnya terbuka. Namun, jalur ke berkas yang ditulis Git untuk diteruskan ke alat diff salah. Misalnya, meskipun Git menghasilkan file BASE, LOCAL, dan REMOTE di direktori repositori (lokasi yang saya sebut git mergetool dari), Meld mencoba membuka setiap file tersebut di direktori yang dapat dieksekusi.

Alih-alih membuka C: \ repo \ roses.txt.LOCAL.2760.txt, Meld mencoba membuka C: \ Program Files (x86) \ Meld \ meld \ roses.txt.LOCAL.2760.txt.

Adakah yang pernah mengalami ini sebelumnya atau tahu cara mengkonfigurasi Git / Meld agar berfungsi dengan benar di Windows?

Nelson
sumber
Saya tidak tahu apakah ini ada gunanya dicoba, tetapi saya menggunakan KDiff3, dan jalur yang disiapkan di gitconfig saya adalah: path = C: / Program Files (x86) /KDiff3/kdiff3.exe dan bukan C: \\ dll.
Fumler
1
Bisakah Anda memecahkan masalah?
Roger
1
Saya belum bisa. Salah satu jawaban mungkin benar, tetapi saya ragu-ragu untuk menandainya karena saya tidak bisa membuat Meld berperilaku baik: - /
Nelson
@Nelson Jangan khawatir, saya juga tidak bisa :(
abergmeier
Harap beri komentar dan pilih untuk masalah hulu sehingga pengguna di masa mendatang bahkan tidak perlu khawatir tentang ini.
Franklin Yu

Jawaban:

152

Mengapa Anda tidak menggunakan git bash untuk Windows?

Setelah menginstal berbaur cukup:

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

Itu saja!

Arugin
sumber
1
Solusi ini berhasil untuk saya, saya juga melakukan perintah di bawah ini untuk tidak meminta saya setiap kali membuka alat git config --global mergetool.prompt false
Vineel
1
Solusi ini berfungsi untuk saya dengan Meld 3.16.2, juga menambahkan git config --global mergetool.keepBackup false untuk menghapus cadangan yang mengganggu tersebut.
Jay
2
untuk beberapa alasan, setelah menerapkan solusi ini semuanya tampak merah (berubah), dan saya harus melakukan ini:git config --global mergetool.meld.cmd '"C:\Program Files (x86)\Meld\Meld.exe" $BASE $LOCAL $REMOTE -o $MERGED'
ihadanny
7
Dengan solusi ini, saya mendapatkan Cannot import: GTK+dan DLL load failed.
Juergen
4
@Juergen Jawabannya adalah bahwa ada ketidakcocokan jalur yang terjadi. Jika Anda menyalin libgirepository-1.0-1.dll yang ada di direktori lib Anda satu direktori ke atas (itu adalah direktori yang sama dengan Meld.exe) dan memulai, Anda akan menemukan semuanya berfungsi,
demongolem
26

Schuess, berhati-hatilah dengan karakter spasi di direktori!

[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\"
Martin Dušek
sumber
1
Hasil edit bagi saya tampaknya telah memecahkan solusi. Revisi asli berfungsi untuk saya, jadi +1. Saya merasa sepertinya berfungsi tanpa garis jalur.
vossad01
Ini berfungsi untuk saya ketika saya menggunakan cmdtanpa pathdan menggunakan tanda kutip balik, bukan tanda kutip tunggal, bukan tanda kutip ganda.
sq33G
Dengan Win10 1903 dan WSL, saya mencoba banyak pendekatan konfigurasi ini dan git tidak dapat memanggil gabungan. Saya akhirnya melakukan symlink Program_Files_x86 -> 'Program Files (x86)/'dan menggunakan[mergetool "meld"] path = /mnt/c/Program_Files_x86/Meld/Meld.exe
Bill Hoag
10

Saya memiliki masalah yang persis sama dan menemukan saya harus secara kasar memaksakan cara saya untuk membuatnya bekerja. Inilah yang saya masukkan ke file .gitconfig saya. (Catatan saya dapat dieksekusi gabungan di lokasi yang berbeda)

[merge]
    tool = meld
[mergetool "meld"]
        cmd = "/c/Meld/meld/meld.exe $PWD/$LOCAL $PWD/$BASE $PWD/$REMOTE --output=$PWD/$MERGED"
schuess
sumber
Persis itu berfungsi dengan baik untuk saya, dengan jalur pemasangan khusus yang saya pilih. Perlu dicatat bahwa ada perbedaan antara "path", yang digunakan oleh kebanyakan pemandu, dan "cmd" yang ditentukan di sini.
FauxFaux
Saya sudah mencoba solusi Anda dan Martin dan tidak ada yang berhasil. Saya pikir ada hal lain yang sedang terjadi. Sebuah jendela terbuka dan kemudian segera menutup, dan kemudian Meld terbuka dengan jalur yang menunjuk ke direktori instalasi Meld dan bukan repo. Bisakah argumen yang diteruskan ke Meld menyebabkannya mati dan kemudian mendeteksi masalah dan diluncurkan kembali dengan jalur default? Saya memahami di sini tetapi saya tidak yakin bagaimana memecahkan masalah ini ...
Nelson
Anda yakin Anda menggunakan meld.exe dan bukan file meld yang ada di (menurut saya) folder bin. Saya ingat mengalami masalah di mana saya hanya menggunakan file meld dan itu meluncurkan aplikasi sebelum git memiliki kesempatan untuk meletakkan file di folder sementara.
schuess
Saya menggunakan solusi Anda, tetapi menggunakan meldfile di bindirektori (saya benar-benar mengganti nama file meld.py) dan berfungsi tanpa masalah.
Jarrett
7

Windows:

Anda dapat menggunakan dua perintah ini ( seperti yang dikatakan Arugin ) - menggunakan jalur yang tepat ke Meld.exe:

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

ATAU Anda bisa mengedit C:\Users\YOUR_USER_NAME\.gitconfigfile Anda secara langsung dan menambahkan yang berikut ini di akhir:

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

Sekarang panggil git difftoolGit Bash untuk Windows dan Meld akan terbuka sebagai penampil difftool default Anda.


Linux:

UPDATE 20 Sept 2019:
- Saya mungkin juga meletakkan versi Linux di sini juga untuk referensi saya sendiri di satu tempat jika tidak ada yang lain:

Untuk Linux juga sangat mudah:

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

Kemudian tambahkan ke bagian bawah file .gitconfig:

[diff]
    tool = meld

Itu dia! git difftoolsekarang bekerja di Linux Ubuntu!

Terkait:

  1. Unduh dan instal gabungan dari sini: https://meldmerge.org/
  2. Bagaimana saya membuat Git menggunakan editor pilihan saya untuk melakukan?
  3. https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles
Gabriel Staples
sumber
4

Saya menemukan solusi dalam laporan bug pada penginstal gabungan, di halaman ini:

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

Sejauh yang saya mengerti, masalahnya adalah bahwa program meld.exe (yang menjalankan gabungan melalui interpreter python) tidak perlu mengatur direktori kerja perintah ke meld.exe. Hal ini menyebabkan jalur relatif diinterpretasikan dengan tidak benar ketika diteruskan sebagai argumen baris perintah.

Solusinya adalah mengganti meld.exe yang disediakan dengan yang dihasilkan dengan mengkompilasi file meld.ahk, menggunakan AHK2EXe (script AutoHotKey -> exe). Cukup unduh skrip yang paling jauh di bawah halaman, karena ada beberapa versi yang diposting di sana.

star99ers
sumber
3
Pelacak masalah tidak disiapkan untuk menetapkan masalah kepada saya secara otomatis, jadi saya melewatkan ada komentar. Untuk karyawan Google yang menemukannya nanti; masalah ini telah diperbaiki.
Keegan
4

Saya juga menghadapi masalah serupa. Sistem operasi yang digunakan adalah Windows 10 dan perubahan berikut berhasil untuk saya. Sepertinya masalah jalur

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

Untuk beberapa alasan, di Windows 10 variabel lingkungan PATH tidak dapat diatur dengan benar selama penginstalan, sehingga muncul pengecualian aneh yang mengatakan bahwa ia tidak dapat menemukan beberapa .dll yang ada di bawah "C: \ Program Files (x86) / Direktori Meld / bin ".

Solusi bagi saya adalah, jalankan di git bash:

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

Atau tambahkan ke windows PATH

C:\Program Files (x86)/Meld/bin
David L.
sumber
2

Tidak ada jawaban yang berhasil untuk saya. Saya berakhir dengan ini di file .gitconfig:

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

Setelah git merge mybranchdiakhiri dengan konflik, Anda cukup mengetikgit mergetool dan membuka gabungan. Setelah menyimpan, Anda harus komit di git dan konflik diselesaikan.

Untuk beberapa alasan, ini hanya bekerja dengan Meld 3.18.x, Meld 3.20.x memberi saya kesalahan.

Jeremy Benks
sumber
0

Setelah mencoba semua hal di atas, pengaturan Meld untuk dijalankan sebagai administrator berfungsi untuk saya.

  1. Klik kanan Meld.exe
  2. Buka Properti > Kompatibilitas dan pilih Run this program as an administratorkotak centang

Kesalahan yang saya terima seperti file temporer yang dirujuk c:\windows\temp\meld-*, yang tidak sedang dibuat. Izin Elevating Meld tampaknya berhasil karena sekarang berfungsi dengan keduanya git difftooldan berjalan secara manual dalam Meld.

Sarang tupai
sumber