git เมื่อเร็ว ๆ นี้ได้เริ่มเข้าใจการเข้ารหัสเช่น utf16 ดูเอกสารgitattributesค้นหาworking-tree-encoding
[ตรวจสอบให้แน่ใจว่าหน้าคนของคุณตรงกันเพราะนี่ค่อนข้างใหม่!]
ถ้า (พูด) ไฟล์เป็น UTF-16 ที่ไม่มี BOM บนเครื่อง Windows ให้เพิ่ม.gitattributes
ไฟล์ของคุณ
*.vmc text working-tree-encoding=UTF-16LE eol=CRLF
หาก UTF-16 (ที่มี bom) บน * nix ให้ทำ:
*.vmc text working-tree-encoding=UTF-16-BOM eol=LF
(แทนที่*.vmc
ด้วย*.whatever
สำหรับwhatever
ไฟล์ประเภทที่คุณต้องจัดการ)
ดู: การสนับสนุนการทำงานต้นไม้เข้ารหัส "UTF-16LE-BOM"
เพิ่มในภายหลัง
การติดตาม @Hackslash อาจพบว่านี่ไม่เพียงพอ
*.vmc text working-tree...
เพื่อให้ได้ข้อความที่แตกต่างที่คุณต้องการ
*.vmc diff working-tree...
วางทั้งงานเช่นกัน
*.vmc text diff working-tree...
แต่มันเป็นเนื้อหา
- ซ้ำซ้อน -
eol=...
แสดงถึงtext
- Verbose - โครงการขนาดใหญ่สามารถมีไฟล์ข้อความได้หลายสิบชนิด
ปัญหา
Git มีมหภาคแอตทริบิวต์ ซึ่งหมายความว่าbinary
-text -diff
ตรงข้าม+text +diff
ไม่มีในตัว แต่คอมไพล์ให้เครื่องมือ (ฉันคิดว่า!) สำหรับการสังเคราะห์
การแก้ไขปัญหา
Git อนุญาตให้หนึ่งเพื่อกำหนดแอตทริบิวต์แมโครใหม่
ฉันขอเสนอด้านบนของ.gitattributes
ไฟล์ที่คุณมี
[attr]textfile text diff
จากนั้นสำหรับเส้นทางทั้งหมดที่จะต้องมีข้อความและแตกต่างกัน
path textfile working-tree-encoding= eol=...
โปรดทราบว่าในกรณีส่วนใหญ่เราต้องการการเข้ารหัสเริ่มต้น (utf-8) และ eol เริ่มต้น (ดั้งเดิม) และอื่น ๆอาจลดลง
บรรทัดส่วนใหญ่ควรมีลักษณะดังนี้
textfile *.c
textfile *.py
Etc
ทำไมไม่ใช้ความแตกต่าง
ในทางปฏิบัติ: ในกรณีส่วนใหญ่เราต้องการ eol ดั้งเดิม eol=...
ซึ่งหมายความว่าไม่มี ดังนั้นtext
จะไม่ได้รับโดยนัยและจะต้องใส่อย่างชัดเจน
แนวคิด: ข้อความ Vs binary เป็นความแตกต่างพื้นฐาน eol, การเข้ารหัส, diff ฯลฯ เป็นเพียงบางส่วนของมัน
คำปฏิเสธ
เนื่องจากเวลาที่แปลกประหลาดที่เราอาศัยอยู่ฉันไม่มีเครื่องจักรที่มีคอมไพล์ทำงานอยู่ในปัจจุบัน ดังนั้นฉันไม่สามารถตรวจสอบการเพิ่มล่าสุดได้ในขณะนี้ หากมีคนพบสิ่งผิดปกติฉันจะส่ง / ลบ