ฉันมีไฟล์บางไฟล์ในที่เก็บ git ซึ่งเป็นไฟล์ค่าที่คั่นด้วยแท็บ Unicode ฉันรู้ว่าไฟล์เหล่านี้มีการเข้ารหัส UTF-8 หรือ UTF-16 ณ เวลาการสร้าง
สำหรับเวิร์กสเตชัน Windows ของฉันที่บางครั้งฉันต้องการแก้ไขใน Excel (ไม่ต้องถาม) ฉันต้องการเปื้อนพวกเขาเป็น UTF-16 ไม่ว่าพวกเขาจะมาถึงเป็น UTF-8 หรือ UTF-16
แต่ในอีกด้านหนึ่งฉันต้องการ UTF-8 เสมอในการเป็นตัวแทนภายในของที่เก็บ (ฉันยังต้องการความแตกต่างที่มีความหมายดังนั้น "จากสิ่งใด ๆ ไปยัง UTF-8" จึงใช้กับ diff
แอตทริบิวต์.)
ปัจจุบันฉัน .gitattributes
กำหนด
*.tsv diff=winutf16 filter=winutf16
ซึ่งหมายความว่า ( .git/config
)
[filter "winutf16"]
clean = iconv -f utf-16 -t utf-8
smudge = iconv -f utf-8 -t utf-16
required
[diff "winutf16"]
textconv = iconv -f utf-16 -t utf-8
เนื่องจากฉันรู้ว่ามันเป็นเพียงหนึ่งในสองตัวเลือกการเข้ารหัส Unicode เท่านั้นฉันควรจะได้รับการเข้ารหัสโดยใช้บางอย่างเช่น -f $(file -b --mime-encoding file.tsv)
แต่นั่นจะทำให้ฉันต้องระบุชื่อไฟล์ในขณะที่สถานะเอกสาร
เมื่อเช็กเอาต์เมื่อระบุคำสั่ง smudge คำสั่งจะถูกป้อนอ็อบเจ็กต์ blob จากอินพุตมาตรฐานและเอาต์พุตมาตรฐานจะถูกใช้เพื่ออัพเดตไฟล์ worktree ในทำนองเดียวกันคำสั่ง clean จะใช้ในการแปลงเนื้อหาของไฟล์ worktree เมื่อเช็คอิน
ดังนั้นทั้งหมดที่ฉันได้รับคือหยดหนึ่งไปยัง stdin อีกครั้ง
มีวิธีที่สะอาดในการทำเช่นนี้บน Windows โดยไม่ต้องติดตั้งสิ่งอื่นนอกเหนือจากที่ระบุไว้แล้วหรือไม่?