git gui - это можно сделать для отображения UTF16?
Есть ли способ сделать git gui
показать и показать различия для файлов UTF16 как-нибудь?
Я нашел некоторую информацию, но это в основном относится к командной строке, а не к графическому интерфейсу.
3 ответа
Я работал над гораздо лучшим решением с помощью людей из msysGit, и придумал этот фильтр clean/smudge. Фильтр использует команды Gnu file и iconv для определения типа файла и преобразования его во внутренний формат UTF-8 msysGit и обратно.
Этот тип фильтра Clean/Smudge дает вам гораздо больше гибкости. Это должно позволить Git обрабатывать ваши файлы смешанного формата как текст UTF-8 в большинстве случаев: diffs, merge, git-grep, а также свойства gitattributes, такие как eol-преобразование, идент-замена и встроенные шаблоны diff.
Решение для фильтров diff, описанное выше, работает только для diff, и поэтому намного более ограничено.
Чтобы настроить этот фильтр:
- Получите Gnu libiconv, файл и установите оба.
- Убедитесь, что каталог GnuWin32\bin (обычно "C:\Program Files\GnuWin32\bin") находится в вашем%PATH%
Добавьте следующее в ~\Git\etc\gitconfig:
[filter "mixedtext"] clean = iconv -sc -f $(file -b --mime-encoding %f) -t utf-8 smudge = iconv -sc -f utf-8 -t $(file -b --mime-encoding %f) required
Добавьте строку в ваши глобальные ~/Git/etc/gitattributes или локальные ~/.gitattributes для обработки текста в смешанном формате, например:
*.txt filter=mixedtext
Я использовал это в каталоге с файлами sql в форматах ANSI, UTF-16 и UTF-8. Это работает до сих пор. За исключением каких-либо неожиданностей, это выглядит как 20% усилий, которые могут покрыть 80% всех проблем с форматированием текста в Windows.
Этот метод предназначен для MSysGit 1.8.1 и протестирован в Windows XP. Я использую Git Extensions 2.44, но так как изменения находятся на уровне Git, они должны работать и для Git Gui. шаги:
Установите Гну Iconv.
Создайте следующий скрипт, назовите его
astextutf16
и поместите его в каталог / bin вашей установки Git (это основано на существующихastextplain
скрипт):#!/bin/sh -e # converts Windows Unicode (UTF-16 / UCS-2) to Git-friendly UTF-8 # notes: # * requires Gnu iconv: # http://gnuwin32.sourceforge.net/packages/libiconv.htm # * this script must be placed in: ~/Git/bin # * modify global ~/Git/etc/gitconfig or local ~/.git/config: # [diff "astextutf16"] # textconv = astextutf16 # * or, from command line: # $ git config diff.astextutf16.textconv astextutf16 # * modify global ~/Git/etc/gitattributes or local ~/.gitattributes: # *.txt diff=astextutf16 if test "$#" != 1 ; then echo "Usage: astextutf16 <file>" 1>&2 exit 1 fi # -f(rom) utf-16 -t(o) utf-8 "\Program Files\GnuWin32\bin\iconv.exe" -f utf-16 -t utf-8 "$1" exit 0
Измените глобальный ~/Git/etc/gitconfig или ваш локальный файл ~/.git/config и добавьте следующие строки:
[diff "astextutf16"] textconv = astextutf16
Или из командной строки:
$ git config diff.astextutf16.textconv astextutf16
Измените глобальные ~/Git/etc/gitattributes или локальный файл ~/.gitattributes и сопоставьте свои расширения для преобразования:
*.txt diff=astextutf16
Тестовое задание. Файлы UTF-16 теперь должны быть видны.
Я столкнулся с аналогичной проблемой.
Я хотел бы улучшить принятый ответ, поскольку у него есть небольшой недостаток. Проблема, с которой я столкнулся, состояла в том, что, если файл не существовал, я получил эту ошибку:
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
Укажите только те файлы, которые могут быть проблемой, в противном случае утилита clean/smudge должна выполнять больше работы (временные файлы).
Мы также массово конвертировали файлы UTF-16le в git в UTF-8, поскольку это наиболее компактная и переносимая кодировка для UTF. Та же команда iconv, которая использовалась в clean и smudge, идеально подходила для постоянного преобразования файлов.
Хорошая вещь в командах clean/smudge заключается в том, что даже если файл зарегистрирован, скажем, с UTF-16le, diff все равно будет работать.