У меня есть несколько файлов в репозитории git, которые представляют собой файлы значений, разделенные табуляцией Юникод. Я знаю, что эти файлы кодируются либо в кодировке 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 со своего стандартного ввода, а его стандартный вывод используется для обновления файла рабочего дерева. Аналогично, команда clean используется для преобразования содержимого файла рабочего дерева при регистрации.
так что все, что я получаю, это капля к stdin, однажды.
Есть ли чистый способ сделать это в Windows без установки чего-либо, кроме того, что уже подразумевается?