Есть ли способ заставить git gui
отображать и отображать различия для файлов UTF16?
Я нашел некоторую информацию, но это в основном относится к командной строке, а не к графическому интерфейсу.
Есть ли способ заставить git gui
отображать и отображать различия для файлов UTF16?
Я нашел некоторую информацию, но это в основном относится к командной строке, а не к графическому интерфейсу.
Я работал над намного лучшим решением с помощью людей из msysGit и придумал этот фильтр очистки/размазывания. Фильтр использует команды Gnu file и iconv для определения типа файла и преобразования его во внутренний формат msysGit UTF-8 и из него.
Этот тип фильтра Clean/Smudge дает вам гораздо больше гибкости. Это должно позволить Git обрабатывать ваши файлы смешанного формата как текст UTF-8 в большинстве случаев: diffs, merge, git-grep, а также свойства gitattributes, такие как eol-conversion, ident-replacement и встроенные шаблоны diff.
Описанное выше решение для фильтрации различий работает только для различий, поэтому его возможности гораздо более ограничены.
Чтобы настроить этот фильтр:
Добавьте следующее в ~\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.
gitk
в msysgit.
- person Adam; 31.03.2014
git pull
, который включает файлы, удаленные другим пользователем git. Я получаю сообщение об ошибке от iconv: conversion to cannot unsupported
... можно ли как-то остановить выполнение этого фильтра для удаленных файлов?
- person Adam; 31.03.2014
.gitattributes
. У вас есть решение, которое также работает в последней версии Git?
- person Adam; 07.10.2015
Этот метод предназначен для MSysGit 1.8.1 и протестирован в Windows XP. Я использую Git Extensions 2.44, но, поскольку изменения находятся на уровне Git, они должны работать и для Git Gui. Шаги:
Установите значок Gnu.
Создайте следующий сценарий, назовите его 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
Я изменил команды, чтобы файл не требовался. Он использует только stdin/stdout. Это решило проблему. Мой файл .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 заключается в том, что даже если файл зарегистрирован, скажем, в UTF-16le, diff все равно будет работать.