Git mergetool กับ Meld บน Windows


94

ใน Linux เครื่องมือผสานที่ฉันชอบคือ Meld และฉันไม่มีปัญหาในการใช้หรือกำหนดค่าให้ทำงานกับ Git อย่างไรก็ตามใน Windows มันเป็นเรื่องที่แตกต่างออกไป

ก่อนอื่นฉันติดตั้ง Meld จากกลุ่มที่พบที่นี่: https://code.google.com/p/meld-installer/

จากนั้นฉันกำหนดค่า. gitconfig ของฉันเช่นนั้นเพื่อรองรับ Meld เป็น mergetool เริ่มต้น

[merge]                                                      
    tool = meld                                                                         

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

ดังนั้นเมื่อฉันมีความขัดแย้งฉันทำ git difftool และในความเป็นจริง Meld ก็เปิด อย่างไรก็ตามเส้นทางไปยังไฟล์ที่ Git เขียนเพื่อส่งผ่านไปยังเครื่องมือ diff นั้นไม่ถูกต้อง ตัวอย่างเช่นแม้ว่า Git จะสร้างไฟล์ BASE, LOCAL และ REMOTE ในไดเร็กทอรีที่เก็บ (ตำแหน่งที่ฉันเรียกว่า git mergetool จาก) Meld พยายามเปิดแต่ละไฟล์ในไดเร็กทอรีของไฟล์ปฏิบัติการ

แทนที่จะเปิด C: \ repo \ roses.txt.LOCAL.2760.txt Meld พยายามเปิด C: \ Program Files (x86) \ Meld \ meld \ roses.txt.LOCAL.2760.txt

มีใครเคยเจอปัญหานี้มาก่อนหรือรู้วิธีกำหนดค่า Git / Meld ให้ทำงานอย่างถูกต้องใน Windows?


ฉันไม่รู้ว่าสิ่งนี้มีจุดใดในการพยายาม แต่ฉันใช้ KDiff3 และเส้นทางที่ตั้งค่าใน gitconfig ของฉันคือ path = C: / Program Files (x86) /KDiff3/kdiff3.exe ไม่ใช่ C: \\ ฯลฯ
Fumler

1
คุณช่วยแก้ปัญหาได้ไหม
Roger

1
ฉันไม่สามารถที่จะ คำตอบข้อหนึ่งน่าจะถูกต้อง แต่ฉันลังเลที่จะทำเครื่องหมายดังกล่าวเนื่องจากฉันไม่สามารถทำให้ Meld ประพฤติตัวได้อย่างถูกต้อง: - /
Nelson

@ เนลสันไม่ต้องกังวลฉันไม่สามารถ :(
abergmeier

โปรดแสดงความคิดเห็นและลงคะแนนให้กับปัญหาต้นน้ำเพื่อให้ผู้ใช้ในอนาคตไม่ต้องกังวลเรื่องนี้
Franklin Yu

คำตอบ:


153

ทำไมคุณไม่ใช้ git bash สำหรับ Windows?

หลังจากติดตั้งเสร็จแล้ว:

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

นั่นคือทั้งหมด!


1
วิธีนี้ใช้ได้ผลสำหรับฉันฉันทำตามคำสั่งด้านล่างเพื่อไม่ให้ฉันแจ้งทุกครั้งที่เปิดเครื่องมือ git config --global mergetool.prompt false
Vineel

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 คำตอบคือมีเส้นทางที่ไม่ตรงกันเกิดขึ้น หากคุณต้องการคัดลอก libgirepository-1.0-1.dll ซึ่งอยู่ในไดเรกทอรี lib ของคุณขึ้นมาหนึ่งไดเร็กทอรี (นั่นคือไดเร็กทอรีเดียวกับ 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

สิ่งนี้ใช้ได้ผลสำหรับฉันเมื่อฉันใช้cmdโดยไม่ใช้pathและใช้ backticks แทนคำพูดเดี่ยวอัญประกาศเดี่ยวแทนเครื่องหมายทับคู่
sq33G

ด้วย Win10 1903 และ WSL ฉันลองใช้วิธีการกำหนดค่าเหล่านี้มากมายและ git ไม่สามารถเรียกใช้ meld ได้ ฉันลงเอยด้วยการเชื่อมโยงProgram_Files_x86 -> 'Program Files (x86)/'และใช้[mergetool "meld"] path = /mnt/c/Program_Files_x86/Meld/Meld.exe
Bill Hoag

10

ฉันมีปัญหาเดียวกันแน่นอนและพบว่าฉันต้องบังคับอย่างดุร้ายเพื่อให้มันใช้งานได้ นี่คือสิ่งที่ฉันใส่ในไฟล์. gitconfig (โปรดทราบว่าไฟล์ปฏิบัติการ meld ของฉันอยู่ในตำแหน่งอื่น)

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

นั่นทำงานได้ดีสำหรับฉันด้วยเส้นทางการติดตั้งแบบกำหนดเองที่ฉันเลือกต่อไป เป็นที่น่าสังเกตว่ามีความแตกต่างระหว่าง "เส้นทาง" ซึ่งคำแนะนำส่วนใหญ่ใช้กับ "cmd" ซึ่งระบุไว้ที่นี่
FauxFaux

ฉันได้ลองทั้งของคุณและวิธีแก้ปัญหาของ Martin แล้วก็ไม่ได้ผล ฉันคิดว่ามีอย่างอื่นเกิดขึ้น หน้าต่างจะเปิดขึ้นแล้วปิดทันทีจากนั้น Meld จะเปิดขึ้นพร้อมกับพา ธ ที่ชี้ไปยังไดเร็กทอรีการติดตั้งของ Meld แทนที่จะเป็น repo อาร์กิวเมนต์ที่ส่งไปยัง Meld อาจทำให้มันตายจากนั้นตรวจพบปัญหาและเปิดใช้งานเส้นทางเริ่มต้นอีกครั้งหรือไม่ ฉันเข้าใจที่นี่ แต่ไม่แน่ใจว่าจะแก้ปัญหานี้อย่างไร ...
Nelson

คุณแน่ใจว่าคุณใช้ meld.exe ไม่ใช่ไฟล์ meld ที่อยู่ใน (ฉันคิดว่า) โฟลเดอร์ bin ฉันจำได้ว่ามีปัญหาที่ฉันใช้แค่ไฟล์ meld และเปิดแอปพลิเคชันก่อนที่ git จะมีโอกาสใส่ไฟล์ในโฟลเดอร์ชั่วคราว
schuess

ฉันใช้วิธีแก้ปัญหาของคุณ แต่ใช้meldไฟล์ในbinไดเร็กทอรี (ฉันเปลี่ยนชื่อไฟล์จริงmeld.py) และทำงานได้โดยไม่มีปัญหา
Jarrett

7

Windows:

คุณสามารถใช้สองคำสั่งนี้ ( ตามที่ 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 สำหรับ Windows และ Meld จะเปิดขึ้นเป็นโปรแกรมดู difftool เริ่มต้นของคุณ


ลินุกซ์:

อัปเดต 20 กันยายน 2019:
- ฉันอาจวางเวอร์ชัน 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 (ซึ่งทำงาน meld ผ่านตัวแปล python) ตั้งค่าไดเร็กทอรีการทำงานของคำสั่งเป็นของ meld.exe โดยไม่จำเป็น ทำให้พา ธ สัมพัทธ์ตีความไม่ถูกต้องเมื่อส่งผ่านเป็นอาร์กิวเมนต์บรรทัดคำสั่ง

วิธีแก้ปัญหาคือแทนที่ meld.exe ที่ให้มาด้วยไฟล์ที่สร้างโดยการคอมไพล์ไฟล์ meld.ahk โดยใช้ AHK2EXe (สคริปต์ AutoHotKey -> exe) เพียงดาวน์โหลดสคริปต์ที่อยู่ด้านล่างของหน้าเว็บเนื่องจากมีบางเวอร์ชันที่โพสต์ไว้ที่นั่น


3
ตัวติดตามปัญหาไม่ได้ตั้งค่าให้กำหนดปัญหาให้ฉันโดยอัตโนมัติดังนั้นฉันจึงพลาดที่มีความคิดเห็น สำหรับชาว Google ที่พบสิ่งนี้ในภายหลัง ปัญหานี้ได้รับการแก้ไขแล้ว
Keegan

4

ฉันประสบปัญหาที่คล้ายกันเช่นกันระบบปฏิบัติการที่ใช้คือ Windows 10 และการเปลี่ยนแปลงต่อไปนี้ใช้ได้ผลสำหรับฉันดูเหมือนปัญหาเส้นทางมากกว่า

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

3

ด้วยเหตุผลบางประการใน Windows 10 ตัวแปรสภาพแวดล้อม PATH ไม่สามารถตั้งค่าได้อย่างถูกต้องระหว่างการติดตั้งดังนั้นจึงมีข้อยกเว้นแปลก ๆ ขึ้นมาโดยบอกว่าไม่พบ. dll บางตัวที่อยู่ภายใต้ "C: \ Program Files (x86) / 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และรวมเปิด หลังจากบันทึกแล้วคุณต้องคอมไพล์และความขัดแย้งจะได้รับการแก้ไข

ด้วยเหตุผลบางประการสิ่งนี้ใช้ได้กับ 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 difftoolและทำงานด้วยตนเองภายใน Meld

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.