Git Diff กับ Beyond Compare


112

ฉันประสบความสำเร็จในการทำให้คอมไพล์เริ่ม Beyond Compare 3 เป็นเครื่องมือที่แตกต่างอย่างไรก็ตามเมื่อฉันทำแตกต่างไฟล์ที่ฉันกำลังเปรียบเทียบจะไม่ถูกโหลด โหลดเฉพาะไฟล์เวอร์ชันล่าสุดและไม่มีอะไรอื่นดังนั้นจึงไม่มีอะไรในบานหน้าต่างด้านขวาของ Beyond Compare

ฉันใช้งานคอมไพล์ 1.6.3.1 ด้วย Cygwin ด้วย Beyond Compare 3 ฉันได้ตั้งค่าเกินกว่าที่จะเปรียบเทียบตามที่พวกเขาแนะนำในส่วนการสนับสนุนของเว็บไซต์ด้วยสคริปต์เช่นนี้:

#!/bin/sh  
# diff is called by git with 7 parameters:  
# path old-file old-hex old-mode new-file new-hex new-mode  
"path_to_bc3_executable" "$2" "$5" | cat

มีใครพบปัญหานี้และทราบวิธีแก้ปัญหานี้หรือไม่?

แก้ไข:
ฉันทำตามคำแนะนำของ VonC แล้ว แต่ฉันยังคงมีปัญหาเหมือนเดิมทุกประการ ฉันยังใหม่กับ Git ดังนั้นบางทีฉันอาจใช้ความแตกต่างไม่ถูกต้อง

ตัวอย่างเช่นฉันกำลังพยายามดูความแตกต่างของไฟล์ด้วยคำสั่งเช่น
git diff main.css

นอกเหนือจากการเปรียบเทียบจะเปิดขึ้นและแสดงเฉพาะ main.css ปัจจุบันของฉันในบานหน้าต่างด้านซ้ายไม่มีอะไรในบานหน้าต่างด้านขวา ฉันต้องการดู main.css ปัจจุบันของฉันในบานหน้าต่างด้านซ้ายเทียบกับ HEAD โดยพื้นฐานแล้วสิ่งที่ฉันได้ทำไว้ล่าสุด

git-diff-wrapper.sh ของฉันมีลักษณะดังนี้:

#!/bin/sh  
# diff is called by git with 7 parameters:  
# path old-file old-hex old-mode new-file new-hex new-mode  
"c:/Program Files/Beyond Compare 3/BCompare.exe" "$2" "$5" | cat

git config ของฉันดูเหมือนสิ่งนี้สำหรับ Diff:

[diff]  
external = c:/cygwin/bin/git-diff-wrapper.sh

คำตอบ:


141

ฉันไม่ได้ใช้ไฟล์. sh ของ wrapper พิเศษ สภาพแวดล้อมของฉันคือ Windows XP, git 1.7.1 บน cygwin และ Beyond Compare 3 ต่อไปนี้คือไฟล์. git / configของฉัน

[diff]
    tool = bc3
[difftool]
    prompt = false
[difftool "bc3"]
    #use cygpath to transform cygwin path $LOCAL (something like /tmp/U5VvP1_abc) to windows path, because bc3 is a windows software
    cmd = \"c:/program files/beyond compare 3/bcomp.exe\" "$(cygpath -w $LOCAL)" "$REMOTE"
[merge]
    tool = bc3
[mergetool]
    prompt = false
[mergetool "bc3"]
    #trustExitCode = true
    cmd = \"c:/program files/beyond compare 3/bcomp.exe\" "$LOCAL" "$REMOTE" "$BASE" "$MERGED"

จากนั้นฉันใช้$ git difftoolเพื่อเปรียบเทียบและ$ git mergetoolเพื่อผสาน

เกี่ยวกับtrustExitCode : สำหรับคำสั่งการผสานแบบกำหนดเองระบุว่าสามารถใช้รหัสออกของคำสั่งผสานเพื่อพิจารณาว่าการผสานสำเร็จหรือไม่ หากไม่ได้ตั้งค่าเป็นจริงระบบจะตรวจสอบการประทับเวลาไฟล์เป้าหมายของการผสานและการผสานจะถือว่าสำเร็จหากไฟล์ได้รับการอัปเดตมิฉะนั้นผู้ใช้จะได้รับแจ้งให้ระบุความสำเร็จของการผสาน


12
ฉันใช้ windows 7 ด้วย mingw git shell ฉันต้องใช้เส้นทางสไตล์ลินุกซ์/c/program filesแทนc:/program files. นอกจากนี้ผมออกและใช้เพียง"$(cygpath -w $LOCAL)" "$LOCAL"นั่นดูเหมือนจะทำเคล็ดลับ
Landon Poch

5
ดังที่ @pClass กล่าวถึงด้านล่างตอนนี้ "bc3" เป็นเครื่องมือภายในใน git เวอร์ชันใหม่กว่า คุณควรใช้ชื่อเฉพาะเช่น "beyondcompare3"
Scott Wegner

4
GitHub Shell (บน Windows 8) บอกฉันbcompare: command not found- จนกว่าฉันจะเปลี่ยน NAME ของเครื่องมือจากbc3เป็นอย่างอื่น (เช่นabc3) ฉันเดาว่าการตั้งค่า Github ภายในบางอย่างถูกรบกวน นอกจากนี้ผมถอดชิ้นส่วนและแทนที่มันด้วย"$(cygpath -w $LOCAL)" "$LOCAL"ตอนนี้ใช้งานได้ดี ขอบคุณ!
Felix Alcala

1
นี่เป็นรถสำหรับฉันเมื่อดูความแตกต่างระหว่างการกระทำสองครั้ง นี่คือทางออกที่ดีกว่า: blog.kifaru.be/2011/07/…
balajimc55

2
ฉันพบบทความนี้ด้วย: scootersoftware.com/support.php?zz=kb_vcs
Guy Avraham

28

ขอขอบคุณที่@dahlbykเขียนPosh-Gitสำหรับการโพสต์ของเขาตั้งค่าเป็นส่วนสำคัญ มันช่วยฉันแก้ปัญหาการกำหนดค่าของฉัน

[diff]
    tool = bc3
[difftool]
    prompt = false
[difftool "bc3"]
    cmd = \"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\"
[merge]
    tool = bc3
[mergetool]
    prompt = false
    keepBackup = false
[mergetool "bc3"]
    cmd = \"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\" \"$BASE\" \"$MERGED\"
    trustExitCode = true
[alias]
    dt = difftool
    mt = mergetool

ฉันลองใช้คำตอบนี้แล้วและไม่สามารถเปลี่ยนแปลงได้บางทีฉันอาจจะทำผิด
Epu

1
@Epu คุณยืนยันว่าเส้นทางของคุณเหมือนกันบนเครื่องของคุณหรือไม่? และมันคือ Beyond Compare 3 ไม่ใช่ v2 ที่เก่ากว่าหรืออะไร?
Nick Josevski

ฉันยืนยันว่าเส้นทางเหมือนกันและเป็น bc3
Epu

1
สิ่งที่น่าตลกคือ 'git difftool file.txt' และ 'git mergetool file.txt' ทำงานได้ดีดังนั้นฉันจึงเปลี่ยนไปใช้ แต่ตอนนี้ 'git diff file.txt' ถูกจับ (ก่อนหน้านี้เคยแสดงความแตกต่างคอนโซลเริ่มต้น) ตอนนี้มันให้ 'ข้อผิดพลาด: ไม่สามารถวางไข่ bc3: ไม่มีไฟล์หรือไดเร็กทอรี \ nexternal diff ตายหยุดที่ file.txt'
Epu

ในกรณีที่มีใครประสบปัญหาเดียวกันกับฉัน (.gitconfig ไม่รู้จักหลังจากแก้ไขแล้ว) ฉันต้องเพิ่มเส้นทางดังนี้:cmd = 'C:\\Program Files\\Beyond Compare 4\\BCompare.exe' \"$LOCAL\" \"$REMOTE\"
sebagomez

20

เรียกใช้คำสั่งเหล่านี้สำหรับ Beyond Compare 2:

git config --global diff.tool bc2
git config --global difftool.bc2.cmd "\"c:/program files (x86)/beyond compare 2/bc2.exe\" \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false

เรียกใช้คำสั่งเหล่านี้สำหรับ Beyond Compare 3:

git config --global diff.tool bc3
git config --global difftool.bc3.cmd "\"c:/program files (x86)/beyond compare 3/bcomp.exe\" \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false

จากนั้นใช้ git difftool


1
รองรับ Beyond Compare 4 หรือไม่
Danijel

2
@Danijel เอกสารอย่างเป็นทางการที่ระบุไว้ใน @Daniel Magnussons answer StatesNote: Use bc3 on the command line for both BC version 3 and 4
BNT


6

นี่คือไฟล์กำหนดค่าของฉัน มันใช้เวลามวยปล้ำ แต่ตอนนี้มันใช้งานได้ ฉันใช้ windows server, msysgit และอื่น ๆ เปรียบเทียบ 3 (เห็นได้ชัดว่าเป็นเวอร์ชัน x86) คุณจะสังเกตเห็นว่าฉันไม่จำเป็นต้องระบุอาร์กิวเมนต์ใด ๆ และฉันใช้ "path" แทน "cmd"

[user]
        name = PeteW
        email = petew@petew.com
[diff]
        tool = bc3
[difftool]
        prompt = false
[difftool "bc3"]
        path = /c/Program Files (x86)/Beyond Compare 3/BComp.exe
[merge]
        tool = bc3
[mergetool]
        prompt = false
        keepBackup = false
[mergetool "bc3"]
        path = /c/Program Files (x86)/Beyond Compare 3/BComp.exe
        trustExitCode = true
[alias]
        dt = difftool
        mt = mergetool

4

Beyond เปรียบเทียบหน้าให้ความช่วยเหลือเป็นช่วงสั้น ๆ บิต

ตรวจสอบคำตอบ diff.externalของฉันสำหรับข้อมูลเพิ่มเติม (เกี่ยวกับไวยากรณ์ที่แน่นอน)

สารสกัด:

$ git config --global diff.external <path_to_wrapper_script>

ที่พรอมต์คำสั่งแทนที่ด้วยพา ธ ไปที่ " git-diff-wrapper.sh" ดังนั้นของคุณ~/.gitconfigมี

-->8-(snip)--
[diff]
    external = <path_to_wrapper_script>
--8<-(snap)--

ตรวจสอบให้แน่ใจว่าได้ใช้ไวยากรณ์ที่ถูกต้องเพื่อระบุเส้นทางไปยังสคริปต์ wrapper และเครื่องมือ diff นั่นคือใช้เครื่องหมายทับไปข้างหน้าแทนแบ็กสแลช ในกรณีของฉันฉันมี

[diff]
    external = c:/Documents and Settings/sschuber/git-diff-wrapper.sh

ใน.gitconfigและ

"d:/Program Files/Beyond Compare 3/BCompare.exe" "$2" "$5" | cat

ในสคริปต์ Wrapper


หมายเหตุ: คุณยังสามารถใช้git difftoolไฟล์.



3

โปรดสังเกตว่าคุณใช้เส้นทางผิดที่ $ 2 เนื่องจากคุณอยู่ภายใต้ Cygwin แต่ไม่ใช่ BC3 ดังนั้นคุณควรระบุเส้นทางแบบเต็ม เช่น "d: / cygwin $ 2"

โปรดดู git-diff-wrapper.sh ของฉันที่นี่:

$ cat ~/git-diff-wrapper.sh
#!/bin/sh
echo $2
echo $5
/cygdrive/c/Program\ Files\ \(x86\)/Beyond\ Compare\ 3/BCompare.exe "d:/programs/cygwin$2" "$5"

โชคดี.


3
คุณควรใช้ cygpath สำหรับสิ่งนี้จริงๆ เช่นbcompare.exe $(cygpath -w $2). ไชโย
Dan Molding

3

หากคุณใช้ windows 7 (มืออาชีพ) และ Git สำหรับ Windows (v 2.15 ขึ้นไป) คุณสามารถเรียกใช้คำสั่งด้านล่างเพื่อค้นหาว่าเครื่องมือต่าง ๆ ที่ Git สำหรับ Windows ของคุณรองรับคืออะไร

git difftool --tool-help

คุณจะเห็นผลลัพธ์ที่คล้ายกับสิ่งนี้

git difftool --tool = 'อาจถูกตั้งค่าเป็นอย่างใดอย่างหนึ่งต่อไปนี้:
vimdiff vimdiff2 vimdiff3

หมายความว่าคอมไพล์ของคุณไม่รองรับ (ไม่สามารถหาได้) นอกเหนือจากการเปรียบเทียบเป็น difftool ในขณะนี้

เพื่อให้ Git ค้นหานอกเหนือจากการเปรียบเทียบเป็น difftool ที่ถูกต้องคุณควรมีไดเร็กทอรีการติดตั้ง Beyond Compareในตัวแปรสภาพแวดล้อมเส้นทางระบบของคุณ คุณสามารถตรวจสอบสิ่งนี้ได้โดยเรียกใช้ bcompare จากเชลล์ (cmd, git bash หรือ powershell ฉันใช้ Git Bash) หาก Beyond Compare ไม่เปิดขึ้นให้เพิ่มไดเร็กทอรีการติดตั้ง (ในกรณีของฉัน C: \ Program Files \ Beyond Compare 4) ไปยังตัวแปรเส้นทางระบบของคุณ หลังจากนี้ให้รีสตาร์ทเชลล์ของคุณ Git จะแสดง Beyond Compare เป็นตัวเลือก difftool ที่เป็นไปได้ คุณสามารถใช้คำสั่งใด ๆ ด้านล่างเพื่อเปิดใช้งานนอกเหนือจากการเปรียบเทียบเป็น difftool (ตัวอย่างเช่นเพื่อเปรียบเทียบไฟล์ในเครื่องกับสาขาอื่น ๆ )

git difftool -t bc branchnametocomparewith -- path-to-file
or 
git difftool --tool=bc branchnametocomparewith -- path-to-file

คุณสามารถกำหนดค่านอกเหนือจากการเปรียบเทียบเป็นเครื่องมือเริ่มต้นโดยใช้คำสั่งด้านล่าง

   git config --global diff.tool bc

ps โปรดทราบว่า bc ในคำสั่งด้านบนสามารถเป็น bc3 หรือ bc ตามสิ่งที่ Git สามารถค้นหาได้จากตัวแปรระบบเส้นทางของคุณ


2

อัปเดตสำหรับ BC4 64 บิต: ใช้ได้กับ Git สำหรับ Windows v.2.16.2 และ Beyond Compare 4 - v.4.2.4 (64bit Edition)

ฉันแก้ไขไฟล์. gitconfig ด้วยตนเองที่อยู่ในรูทผู้ใช้ของฉัน "C: \ Users \ MyUserName" และแทนที่แท็ก diff / difftool และ merge / mergetool ด้วย

[diff]
  tool = bc
[difftool "bc"]
  path = 'C:/Program Files/Beyond Compare 4/BComp.exe'
[difftool "bc"]
  cmd = \"C:/Program Files/Beyond Compare 4/BComp.exe\" \"$LOCAL\" \"$REMOTE\"
[difftool]
  prompt = false
[merge]
  tool = bc
[mergetool "bc"]
  path = 'C:/Program Files/Beyond Compare 4/BComp.exe'
[mergetool "bc"]
  cmd = \"C:/Program Files/Beyond Compare 4/BComp.exe\" \"$REMOTE\" \"$LOCAL\" \"$BASE\" \"$MERGED\"


1

ความแตกต่างอยู่ใน exe ที่ถูกเรียก: ตั้งค่าให้เรียก bcomp.exe และใช้งานได้ดี กำหนดค่าสภาพแวดล้อมของคุณเพื่อเรียก bcompare.exe และคุณจะพบว่าด้านข้างของการเปรียบเทียบที่นำมาจากระบบการแก้ไขของคุณว่างเปล่า


1

เรียกใช้คำสั่งเหล่านี้สำหรับ Beyond Compare 3 (หากเส้นทาง BCompare.exe แตกต่างกันในระบบของคุณโปรดแทนที่ตามของคุณ):

git config --global diff.tool bc3
git config --global difftool.bc3.cmd "\"c:/program files (x86)/beyond compare 3/BCompare.exe\" \"$LOCAL\" \"$REMOTE\""
git config --global difftool.prompt false

จากนั้นใช้ git difftool


1

Windows 10, Git v2.13.2

.gitconfig ของฉัน อย่าลืมเพิ่มอักขระหลีกสำหรับ "\" และ "" "

[diff]
    tool = bc4
[difftool]
    prompt = false
[difftool "bc4"]
    cmd = \"C:\\Program Files\\Beyond Compare 4\\BCompare.exe\" \"$LOCAL\" \"$REMOTE\"
[merge]
    tool = bc4
[mergetool "bc4"]
    path = C:\\Program Files\\Beyond Compare 4\\BCompare.exe

คุณอาจอ้างอิงการตั้งค่าที่เหนือกว่าการเปรียบเทียบเป็น difftoolสำหรับการใช้คำสั่ง git เพื่อกำหนดค่า


สวัสดีฉันมีสคริปต์ที่คล้ายกันและล้มเหลวจนกว่าฉันจะเปลี่ยนเป็น C: \\ Program Files \\ Beyond Compare 4 \\ BComp.exe เมื่อใช้ BCompare.exe ไฟล์ชั่วคราวจะถูกลบก่อนที่จะเปรียบเทียบได้ดังนั้นฉันจึงเห็นเฉพาะไฟล์ล่าสุดเท่านั้นไม่มีเวอร์ชันที่เช็คอิน
gabriel

0

ไม่ว่าจะด้วยเหตุผลใดก็ตามสำหรับฉันไฟล์ tmp ที่สร้างโดย git diff ถูกลบก่อนที่จะเปิดขึ้นมาเกินกว่าจะเปรียบเทียบได้ ฉันต้องคัดลอกไปที่อื่นก่อน

cp -r $2 "/cygdrive/c/temp$2"
cygstart /cygdrive/c/Program\ Files\ \(x86\)/Beyond\ Compare\ 3/BCompare.exe "C:/temp$2" "$5"

0

สำหรับ MAC หลังจากทำการวิจัยมากมายมันได้ผลสำหรับฉัน .. ! 1. ติดตั้ง Beyond Compare และจะติดตั้งในตำแหน่งด้านล่าง

/ Applications / Beyond \ Compare.app/Contents/MacOS/bcomp

โปรดทำตามขั้นตอนเหล่านี้เพื่อทำให้ bc เป็นเครื่องมือ diff / merge ใน git http://www.scootersoftware.com/support.php?zz=kb_mac


0

สำหรับ git เวอร์ชัน 2.15.1.windows.2 ที่มี BC2.exe

ในที่สุด config ด้านล่างก็ใช้งานได้กับเครื่องของฉัน

[difftool "bc2"] cmd = \"c:/program files/beyond compare 2/bc2.exe\" ${LOCAL} ${REMOTE}

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