Я столкнулся с подобной проблемой.
Я бы хотел улучшить принятый ответ, поскольку у него есть небольшой недостаток. Проблема, с которой я столкнулся, состояла в том, что, если файл не существовал, я получил эту ошибку:
conversion to cannot unsupported
Я изменил команды, так что файл не требуется. Он использует только стандартный ввод / вывод. Это решило проблему. Мой файл .git / config теперь выглядит так:
[filter "mixedtext"]
clean = "GITTMP=$(mktemp);TYPE=$( tee $GITTMP|file -b --mime-encoding - ); cat $GITTMP | iconv -sc -f $TYPE -t utf-8; rm -f $GITTMP"
smudge = "GITTMP=$(mktemp);TYPE=$( tee $GITTMP|file -b --mime-encoding - ); cat $GITTMP | iconv -sc -f utf-8 -t $TYPE; rm -f $GITTMP"
required = true
Чтобы создать записи в файле .git / config, используйте следующие команды:
git config --replace-all filter.mixedtext.clean 'GITTMP=$(mktemp);TYPE=$( tee $GITTMP|file -b --mime-encoding - ); cat $GITTMP | iconv -sc -f $TYPE -t utf-8; rm -f $GITTMP'
git config --replace-all filter.mixedtext.smudge 'GITTMP=$(mktemp);TYPE=$( tee $GITTMP|file -b --mime-encoding - ); cat $GITTMP | iconv -sc -f utf-8 -t $TYPE; rm -f $GITTMP'
git config --replace-all filter.mixedtext.required true
Мой файл .gitattributes выглядит так:
*.txt filter=mixedtext
*.ps1 filter=mixedtext
*.sql filter=mixedtext
Укажите только те файлы, которые могут быть проблемой, в противном случае очистка / размазка должна выполнять больше работы (временные файлы).
Мы также массово конвертировали файлы UTF-16le в git в UTF-8, поскольку это наиболее компактная и переносимая кодировка для UTF. Та же команда iconv, которая использовалась в clean и smudge, идеально подходила для постоянного преобразования файлов.
Хорошая вещь в командах clean / smudge состоит в том, что даже если файл зарегистрирован, скажем, с UTF-16le, diff все равно будет работать.