เพื่อที่จะ 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แต่คุณสามารถใช้เครื่องมืออื่น ๆ ข้างต้นสามารถรวมกันเป็นสคริปต์ขนาดเล็กหากคุณต้องการทำเช่นนี้ซ้ำแล้วซ้ำอีก