คอมไพล์รอยเปื้อนและทำความสะอาด


2

ฉันมีไฟล์บางไฟล์ในที่เก็บ 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 โดยไม่ต้องติดตั้งสิ่งอื่นนอกเหนือจากที่ระบุไว้แล้วหรือไม่?

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.