git gui - это можно сделать для отображения UTF16? - PullRequest
3 голосов
/ 12 октября 2010

Есть ли способ заставить git gui отображать и отображать различия для файлов UTF16 как-нибудь?

Я нашел некоторую информацию , но это в основном относится к командной строке, а не к графическому интерфейсу.

Ответы [ 3 ]

5 голосов
/ 29 апреля 2013

Я работал над улучшением намного с помощью людей из msysGit и придумал этот фильтр очистки / удаления пятен.Фильтр использует команды Gnu file и iconv, чтобы определить тип файла и преобразовать его во внутренний формат msysGit UTF-8 и обратно.

Этот тип фильтра очистки / удаления пятен дает вам гораздо большую гибкость.Он должен позволять Git обрабатывать ваши файлы смешанного формата как текст UTF-8 в большинстве случаев: diffs, merge, git-grep, а также свойства gitattributes, такие как eol-преобразование, идент-замена и встроенные шаблоны diff.

Решение фильтра diff, описанное выше, работает только для diff, поэтому оно гораздо более ограничено.

Чтобы настроить этот фильтр:

  1. Get Gnu libiconv и file , и установите оба.
  2. Убедитесь, что каталог GnuWin32 \ bin (обычно «C: \ Program Files \ GnuWin32 \ bin») находится в вашем% PATH%
  3. Добавьте следующее в ~ \ 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
    
  4. Добавьте строку в ваш глобальный ~ / Git / etc / gitattributesили локальные ~ / .gitattributes для обработки текста в смешанном формате, например:

    *.txt filter=mixedtext
    

Я использовал это в каталоге с файлами sql в ANSI, UTF-16 и UTF-8 форматов.Это работает до сих пор.За исключением каких-либо неожиданностей, это похоже на 20% усилий, которые могут покрыть 80% всех проблем с форматированием текста в Windows.

3 голосов
/ 10 апреля 2013

Этот метод предназначен для MSysGit 1.8.1 и протестирован в Windows XP.Я использую Git Extensions 2.44, но так как изменения находятся на уровне Git, они должны работать и для Git Gui.Шаги:

  1. Установка Gnu Iconv .

  2. Создайте следующий скрипт, назовите его 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
    
  3. Измените глобальный ~ / Git / etc / gitconfig или ваш локальный~ / .git / config file и добавьте следующие строки:

    [diff "astextutf16"]  
        textconv = astextutf16
    
  4. Или из командной строки:

    $ git config diff.astextutf16.textconv astextutf16

  5. Измените глобальные ~ / Git / etc / gitattributes или локальный файл ~ / .gitattributes и сопоставьте свои расширения для преобразования:

    *.txt diff=astextutf16

  6. Test.Файлы UTF-16 теперь должны быть видны.

2 голосов
/ 06 февраля 2016

Я столкнулся с подобной проблемой.

Я бы хотел улучшить принятый ответ, поскольку у него есть небольшой недостаток. Проблема, с которой я столкнулся, состояла в том, что, если файл не существовал, я получил эту ошибку:

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 все равно будет работать.

...