เพื่อให้คำตอบการตั้งค่า "diff.external"ก่อนหน้าของฉันเสร็จสมบูรณ์ด้านบน:
ในฐานะที่เป็นที่กล่าวถึงโดย Jakub , Git1.6.3 แนะนำคอมไพล์difftoolเสนอเดิมในเดือนกันยายน 2008:
USAGE = '[--tool=tool] [--commit=ref] [--start=ref --end=ref] [--no-prompt] [file to merge]'
(ดู--extcmd
ในส่วนสุดท้ายของคำตอบนี้)
$LOCAL
มีเนื้อหาของไฟล์จากการแก้ไขเริ่มต้นและ$REMOTE
มีเนื้อหาของไฟล์ในการแก้ไขสิ้นสุด
$BASE
มีเนื้อหาของไฟล์ในว
มันgit-mergetool
ถูกดัดแปลงโดยทั่วไปเพื่อทำงานกับดัชนี git / worktree
กรณีการใช้งานปกติสำหรับสคริปต์นี้คือเมื่อคุณมีการจัดฉากหรือเปลี่ยนแปลง unstaged และคุณต้องการที่จะเห็นการเปลี่ยนแปลงในมุมมองที่แตกต่างด้านข้าง (เช่นxxdiff
, tkdiff
ฯลฯ )
git difftool [<filename>*]
กรณีการใช้งานอื่นคือเมื่อคุณต้องการเห็นข้อมูลเดียวกัน แต่กำลังเปรียบเทียบข้อผูกพันโดยพลการ (นี่คือส่วนที่การแยกวิเคราะห์ revarg อาจจะดีกว่า)
git difftool --start=HEAD^ --end=HEAD [-- <filename>*]
กรณีใช้งานล่าสุดคือเมื่อคุณต้องการเปรียบเทียบ worktree ปัจจุบันของคุณกับสิ่งอื่นที่ไม่ใช่ HEAD (เช่นแท็ก)
git difftool --commit=v1.0.0 [-- <filename>*]
หมายเหตุ: ตั้งแต่ Git 2.5 git config diff.tool winmerge
ก็พอแล้ว!
ดูที่ " git mergetool winmerge "
และเนื่องจาก Git 1.7.11คุณมีตัวเลือก--dir-diff
เพื่อวางไข่เครื่องมือ diff ภายนอกที่สามารถเปรียบเทียบลำดับชั้นไดเรกทอรีสองครั้งในเวลาหนึ่งหลังจากที่เติมไดเรกทอรีชั่วคราวสองไดเรกทอรีแทนที่จะเรียกใช้อินสแตนซ์ของเครื่องมือภายนอกหนึ่งครั้งต่อคู่ไฟล์
ก่อนที่ Git 2.5:
กรณีปฏิบัติสำหรับการกำหนดค่าdifftool
ด้วยเครื่องมือ diff ที่กำหนดเองของคุณ:
C:\myGitRepo>git config --global diff.tool winmerge
C:\myGitRepo>git config --global difftool.winmerge.cmd "winmerge.sh \"$LOCAL\" \"$REMOTE\""
C:\myGitRepo>git config --global difftool.prompt false
ด้วย winmerge.sh เก็บไว้ในส่วนไดเรกทอรีของ PATH ของคุณ:
#!/bin/sh
echo Launching WinMergeU.exe: $1 $2
"C:/Program Files/WinMerge/WinMergeU.exe" -u -e "$1" "$2" -dl "Local" -dr "Remote"
หากคุณมีเครื่องมืออื่น (kdiff3, P4Diff, ... ) ให้สร้างเชลล์สคริปต์อื่นและกำหนดค่าdifftool.myDiffTool.cmd
คำสั่งที่เหมาะสม
จากนั้นคุณสามารถสลับเครื่องมือด้วยการdiff.tool
กำหนดค่า
คุณมีรายการบล็อกนี้โดย Daveเพื่อเพิ่มรายละเอียดอื่น ๆ
(หรือคำถามนี้สำหรับwinmergeu
ตัวเลือก)
ความสนใจในการตั้งค่านี้คือwinmerge.sh
สคริปต์ : คุณสามารถปรับแต่งให้คำนึงถึงกรณีพิเศษ
ดูตัวอย่างคำตอบของDavid Marble ด้านล่างเพื่อดูตัวอย่างที่เกี่ยวข้องกับ:
- ไฟล์ใหม่ในแหล่งกำเนิดหรือปลายทาง
- ลบไฟล์ในแหล่งกำเนิดหรือปลายทาง
ในขณะที่Kem Masonกล่าวถึงคำตอบของเขาคุณสามารถหลีกเลี่ยงกระดาษห่อโดยใช้--extcmd
ตัวเลือก :
--extcmd=<command>
ระบุคำสั่งที่กำหนดเองสำหรับการดูต่าง git-difftool
ละเว้นค่าดีฟอลต์ที่กำหนดค่าไว้และรัน$command $LOCAL $REMOTE
เมื่อระบุอ็อพชันนี้
ตัวอย่างเช่นนี้เป็นวิธีที่gitk
สามารถทำงาน / ใช้diff
เครื่องมือ