Windows'ta Meld ile Git mergetool


94

Linux'ta en sevdiğim birleştirme aracı Meld'dir ve onu Git ile çalışacak şekilde kullanırken veya yapılandırırken hiçbir sorun yaşamadım. Ancak, Windows'ta durum farklıdır.

İlk olarak, Meld'i burada bulduğum bir paketten kurdum: https://code.google.com/p/meld-installer/

Sonra, .gitconfig'imi, Meld'yi varsayılan birleştirme aracı olarak destekleyecek şekilde yapılandırdım

[merge]                                                      
    tool = meld                                                                         

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

Yani, bir anlaşmazlığım olduğunda git difftool yapıyorum ve Meld aslında açılıyor. Ancak, Git'in diff aracına geçmek için yazdığı dosyaların yolları yanlıştır. Örneğin, Git depo dizininde (git mergetool adını verdiğim konum) BASE, LOCAL ve REMOTE dosyalarını oluştursa da, Meld bu dosyaların her birini yürütülebilir dosyanın dizininde açmaya çalışır.

C: \ repo \ roses.txt.LOCAL.2760.txt dosyasını açmak yerine Meld, C: \ Program Files (x86) \ Meld \ meld \ roses.txt.LOCAL.2760.txt dosyasını açmaya çalışır.

Bununla daha önce karşılaşan veya Git / Meld'i Windows'ta düzgün çalışması için nasıl yapılandıracağını bilen var mı?


Bunun denenmekte bir anlamı olup olmadığı hakkında hiçbir fikrim yok, ancak KDiff3 kullanıyorum ve gitconfig'imde ayarlanan yol: yol = C: / Program Dosyaları (x86) /KDiff3/kdiff3.exe ve C: \\ değil vb.
Fumler

1
Problemi çözebilir misin?
Roger

1
Yapamadım. Cevaplardan biri muhtemelen doğrudur, ancak Meld'in düzgün davranmasını sağlayamadığım için herhangi birini böyle işaretlemekte tereddüt ediyorum: - /
Nelson 13

@Nelson Merak etme, ben de yapamam :(
abergmeier

Gelecekteki kullanıcıların bu konuda endişelenmesine gerek kalmaması için lütfen yukarı akış sorununa yorum yapın ve oy verin .
Franklin Yu

Yanıtlar:


152

Windows için neden git bash kullanmıyorsunuz?

Meld'yi kurduktan sonra basitçe:

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

Bu kadar!


1
Bu çözüm benim için çalıştı, git config --global mergetool.prompt false
Vineel

1
Bu çözüm Meld 3.16.2 ile benim için çalıştı, ayrıca bu sinir bozucu yedeklemeleri kaldırmak için git config --global mergetool.keepBackup false ekledi.
Jay

2
nedense, bu çözümü uyguladıktan sonra her şey kırmızı gibi göründü (değişti) ve bunu yapmak zorunda kaldım:git config --global mergetool.meld.cmd '"C:\Program Files (x86)\Meld\Meld.exe" $BASE $LOCAL $REMOTE -o $MERGED'
ihadanny

7
Bu çözümle Cannot import: GTK+ve alırım DLL load failed.
Juergen

4
@Juergen Bunun cevabı, bir yol uyuşmazlığı olduğu. Eğer lib dizininizdeki libgirepository-1.0-1.dll dosyasını bir dizine kopyalayıp (Meld.exe ile aynı dizini) kopyalayıp başlatırsanız, çalışan şeyler bulursunuz,
demongolem

26

Schuess, dizinlerdeki boşluk karakterine dikkat et!

[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
Düzenlemeler bana çözümü bozmuş gibi görünüyor. Orijinal revizyon benim için çalışıyor, bu yüzden +1. Yol çizgisi olmadan işe yaradığını buldum.
vossad01

Ben kullanıldığında bu benim için çalıştı cmdolmadan pathkomutu ters tırnak yerine tek tırnak yerine eğik çizgi-çift tırnak tek tırnak ve kullanılmış.
sq33G

Win10 1903 ve WSL ile, bu yapılandırma yaklaşımlarından bir kısmını denedim ve git meld'yi çağıramadı. Sembolik bağlantı kurmayı bıraktım Program_Files_x86 -> 'Program Files (x86)/'ve kullandım[mergetool "meld"] path = /mnt/c/Program_Files_x86/Meld/Meld.exe
Bill Hoag

10

Tam olarak aynı sorunu yaşadım ve işe yaraması için kendi yolumu kaba kuvvetle zorlamam gerektiğini fark ettim. İşte .gitconfig dosyama koyduğum şey. (Meld yürütülebilir dosyamın farklı bir konumda olduğunu unutmayın)

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

Yine de seçtiğim özel yükleme yolu ile tam olarak bu benim için iyi çalıştı. Çoğu kılavuzun kullandığı "yol" ile burada belirtilen "cmd" arasında bir fark olduğunu belirtmek gerekir.
FauxFaux

Hem sizin hem de Martin'in çözümlerini denedim ve ikisi de işe yaramadı. Sanırım başka bir şey var. Bir pencere açılır ve hemen kapanır ve ardından Meld, depo yerine Meld'nin kurulum dizinine işaret eden yollarla açılır. Meld'e iletilen bir argüman ölmesine neden oluyor olabilir ve ardından sorunu tespit edip varsayılan yolla yeniden başlatabilir mi? Burada anlıyorum ama bunu nasıl gidereceğimi bilmiyorum ...
Nelson

Bir bin klasöründe (sanırım) bulunan meld dosyasını değil, meld.exe'yi kullandığınızdan eminsiniz. Sadece meld dosyasını kullandığım ve git dosyaları geçici klasöre koyma şansı bulamadan uygulamayı başlatan bir sorun yaşadığımı hatırlıyorum.
schuess

Çözümünüzü kullandım, ancak dizindeki melddosyayı kullanarak bin(aslında dosyayı yeniden adlandırdım meld.py) ve sorunsuz çalıştı.
Jarrett

7

Pencereler:

Meld.exe'ye doğru yolu kullanarak bu iki komutu ( Arugin'in dediği gibi ) kullanabilirsiniz:

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

VEYA C:\Users\YOUR_USER_NAME\.gitconfigdosyanızı doğrudan düzenleyebilir ve sonuna aşağıdakileri ekleyebilirsiniz:

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

Şimdi git difftoolWindows için Git Bash'i arayın ve Meld varsayılan diftool görüntüleyiciniz olarak açılacaktır.


Linux:

GÜNCELLEME 20 Eylül 2019:
- Linux sürümünü de buraya koyabilirim, başka hiçbir şey yoksa kendi referansım için:

Linux için de çok kolaydır:

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

Ardından .gitconfig dosyasının altına ekleyin:

[diff]
    tool = meld

Bu kadar! git difftoolartık Linux Ubuntu'da çalışıyor!

İlişkili:

  1. Meld'i buradan indirin ve yükleyin: https://meldmerge.org/
  2. Git'in taahhütler için seçtiğim düzenleyiciyi kullanmasını nasıl sağlarım?
  3. https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles

4

Bu sayfada meld yükleyiciyle ilgili bir hata raporunda bir çözüm buldum:

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

Anladığım kadarıyla sorun, meld.exe programının (meld'yi python yorumlayıcısı aracılığıyla çalıştırır) gereksiz yere komutun çalışma dizinini meld.exe'ye ayarlamasıdır. Bu, göreceli yolların komut satırı bağımsız değişkenleri olarak iletildiğinde yanlış yorumlanmasına neden olur.

Çözüm, sağlanan meld.exe'yi, AHK2EXe (AutoHotKey script -> exe) kullanarak meld.ahk dosyasını derleyerek oluşturulan bir tane ile değiştirmektir. Orada yayınlanan birkaç sürüm olduğu için komut dosyasını sayfanın en aşağısına indirin.


3
Sorun izleyici, sorunu bana otomatik olarak atayacak şekilde ayarlanmadığı için yorumların olduğunu kaçırdım. Bunu daha sonra bulan Google çalışanları için; bu sorun düzeltildi.
Keegan

4

Ben de benzer bir sorunla karşılaştım, kullanılan işletim sistemi Windows 10 ve aşağıdaki değişiklikler benim için çalıştı, daha çok yol sorunu gibi görünüyor

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

3

Bazı nedenlerden dolayı, Windows 10'da PATH ortam değişkeni kurulum sırasında doğru şekilde ayarlanamadı, bu nedenle "C: \ Program Files (x86) / altında bulunan bazı .dll dosyalarını bulamadığını söyleyen garip bir istisna ortaya çıktı" Meld / bin "dizini.

Benim için bir çözüm, git bash'da yürütün:

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

Veya PATH pencerelerine ekleyin

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

2

Cevapların hiçbiri benim için işe yaramadı. Bunu .gitconfig dosyasında buldum:

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

git merge mybranchÇakışmalarla bittikten sonra , sadece git mergetoolyazarsınız ve meld açılır. Bir kaydetme işleminden sonra, git'e kaydetmeniz gerekir ve çakışmalar çözülür.

Nedense, bu sadece Meld 3.18.x ile çalıştı, Meld 3.20.x bana bir hata veriyor.


0

Yukarıdakilerin hepsini denedikten sonra, Meld'i yönetici olarak çalıştırmak için ayarlamak benim için çalıştı.

  1. Meld.exe'ye sağ tıklayın
  2. Git Özellikler > Uyumluluk ve seçmek Run this program as an administratoronay kutusunu

Referans alınan geçici dosyalar gibi aldığım hatalar c:\windows\temp\meld-* , oluşturulmayan . Meld'in izinlerini yükseltmek, şimdi her ikisiyle de git difftoolçalıştığı ve Meld içinde manuel olarak çalıştığı için hile yapıyor gibi görünüyor .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.