เพื่อที่จะ diff ไฟล์ไบนารีในคอมไพล์ฉันคิดว่าฉันต้องตั้งค่า difftool
สิ่งที่แตกต่างกันในการทำงาน? คุณใส่พารามิเตอร์อย่างไร?
เพื่อที่จะ diff ไฟล์ไบนารีในคอมไพล์ฉันคิดว่าฉันต้องตั้งค่า difftool
สิ่งที่แตกต่างกันในการทำงาน? คุณใส่พารามิเตอร์อย่างไร?
คำตอบ:
คุณสามารถตั้งค่าtextconv
ตัวเลือกการกำหนดค่าสำหรับชนิดไฟล์ โปรดดูที่ "การแสดง diffs ข้อความของไฟล์ไบนารี" ในgitattributes (5) สิ่งที่คุณควรใช้ขึ้นอยู่กับประเภทของไฟล์
ตัวอย่างที่ 1 :
สมมติว่าคุณต้องการกระจายเนื้อหาของไฟล์ zip ในกรณีดังกล่าวคุณควรใส่สิ่งต่อไปนี้ในไฟล์ $ GIT_DIR / config หรือ $ HOME / .gitconfig
[diff "zip"]
textconv = unzip -v
ครั้งต่อไปที่คุณขอ diff บนไฟล์ zip ใน repo มันจะเรียกunzip -v
ทั้งสองเวอร์ชั่นและ diff ข้อความที่เกิดขึ้น
ตัวอย่างที่ 2 :
สำหรับไฟล์ pdf คุณสามารถใช้เช่นpdfinfo
;
[diff "pdf"]
textconv = pdfinfo
ตัวอย่างที่ 3 :
หากไม่มียูทิลิตี้ข้อมูลเฉพาะสำหรับประเภทไฟล์คุณสามารถใช้เช่นhexdump
(มาพร้อมกับ FreeBSD และ OSX พร้อมใช้งานบน Linux):
[diff "bin"]
textconv = hexdump -v -C
คำตอบจาก Roland Smith มีประโยชน์ แต่ในปัจจุบันไม่สมบูรณ์ (ดูความคิดเห็น) - มีสองส่วน
คุณสามารถกำหนดคำสั่ง diff ใหม่ใน.git/config
ไฟล์ของที่เก็บหรือ~/.gitconfig
ไฟล์โกลบอลส่วนบุคคลของคุณตัวอย่างเช่นคำสั่ง hex diff โดยใช้hexdump
:
[diff "hex"]
textconv = hexdump -v -C
binary = true
ถัดไปคุณต้องใช้.gitattributes
ไฟล์ของที่เก็บเพื่อบอก git ว่าควรใช้ไฟล์ใดกับคำสั่ง diff พิเศษนี้:
# Binary files (no line-ending conversions), diff using hexdump
*.bin binary diff=hex
เช่นเดียวกับ.gitignore
ไฟล์.gitattributes
ไฟล์ควรถูกตรวจสอบในที่เก็บของคุณ
ในกรณีของฉันฉันมีนามสกุลไฟล์ต่าง ๆ ที่ฉันต้องการใช้เป็นไบนารี่ (เช่นหลีกเลี่ยงการแปลงบรรทัดที่ลงท้ายด้วยการใช้ git บน Windows) และเห็นความแตกต่างผ่านhexdump
:
https://github.com/peterjc/galaxy_blast/commit/5ec4695e6c3da3926fb100ca006f0f3e88c53c3d
ดูเพิ่มเติมที่https://github.com/resin-io/etcher/pull/1367สำหรับตัวอย่างอื่นที่กำหนดคำสั่ง hexdump diff สำหรับใช้กับไฟล์รูปภาพ
.gitattributes
โกลบอลได้เช่นกัน (ไปพร้อมกับ[diff]
รายการในโกลบอลของคุณ.gitconfig
) หากคุณกำหนด.gitattributes
ให้โลโกเป็น repo ผู้ใช้จะต้องแก้ไข.gitconfig
การตั้งค่า repo ในพื้นที่ของเขาเพราะเหตุผลด้านความปลอดภัยที่จะไม่ถูกผลักไปยังรีโมต ไม่ว่าจะด้วยวิธีใดผู้ใช้แต่ละคนต้องอัปเดตไฟล์ภายในเครื่อง / กำหนดค่าเพื่อเปิดใช้งานลักษณะการทำงานนี้ ใน.gitconfig
ภายใต้การ[core]
เพิ่มattributesfile = c:/users/<username>/.gitattributes
หรือทุกที่ที่คุณต้องการที่จะเก็บไว้ถ้าคุณทำมันทั่วโลก (ทราบ forwardslashes แม้ใน Windows)
หากคุณต้องการบังคับให้คอมไพล์แสดงไฟล์ไบนารีต่างกันเป็น--text
ตัวเลือกการใช้ข้อความธรรมดาต่างๆ ดังนี้:
git diff --text
ข้างต้นเป็นวิธีการที่ครอบคลุมในการทำ .. อย่างไรก็ตามถ้าคุณเพียงแค่ต้องทำบางไฟล์วิธีต่อไปนี้คือสิ่งที่ฉันใช้:
git checkout HEAD -- /path/to/file > ~/file
vimdiff ~/file /path/to/file
ที่นี่ฉันใช้vimdiff
แต่คุณสามารถใช้เครื่องมืออื่น ๆ ข้างต้นสามารถรวมกันเป็นสคริปต์ขนาดเล็กหากคุณต้องการทำเช่นนี้ซ้ำแล้วซ้ำอีก