Вернее сказать настройка правильного отображения русских шрифтов (кириллицы) в Git.
В этом посте я приведу несколько примеров использования кириллицы в Git. Сразу хочу сказать, что Git по умолчанию нормально работает с юникод, поэтому лучше сразу вести вести все свои проекты в юникод, если это возможно конечно.
И так сперва рассмотрим как Git работает с русским языком в юникод.
Создадим каталог UTFtest и в нем репозитарий Git. Дополнительных настроек ни каких не делаем, кроме как задаем имя и email пользователя.
Теперь создаем текстовый файлик TestUTF.txt в кодировке юникод. Я использовал для этого Notepad++, но можно и любой другой, главное чтобы он поддерживал создание файлов в юникод без BOM.
В настройках Notepad++ отключение BOM выглядит так
И так мы создали файлик, теперь, посмотрим статус, добавим файл в индекс и сделаем первый коммит.
И так мы сделали первый коммит нашего файла. Git правда предупредил, что он подозревает что мой терминал не поддерживает юникод, и дал совет как это можно исправить. Но это на самом деле не так. Мой терминал поддерживает юникод. И сейчас мы в этом убедимся.
Добавим в наш файлик вторую строчку.
Теперь опять посмотрим статус, добавим изменения в индекс и закоммитим.
Помним, что мы редактировали файлик в кодировке юникод (UTF) без BOM.
Теперь посмотрим простой лог наших изменений.
Git вывел краткую информацию о наших коммитах. Кто, когда, комментарий и контрольную сумму каждого коммита.
Теперь посмотрим дельту, разницу между нашими коммитами, то есть более подробно, что было изменено.
Как видим Git показал нам что было изменено в файле во втором коммите при сравнении его с первым коммитом.
Пока не будем вдаваться в подробности всего вывода информации. Сейчас главное что русский текст комментариев к коммитам, а так же русский текст в текстовом файле при выводе дельты в логе отображается правильно.
От сюда вывод, что Git по умолчанию использует UTF-8 и как следствие с русским языком проблем не возникает.
Теперь на всякий случай покажу что же такое этот BOM и как сей зверь выглядит в коммитах.
Для этого создам текстовый файл в Far Manager, добавлю его в индекс, закоммитю, добавлю в файлик еще одно строчку и снова сделаю коммит.
Хотя в редакторе Far manager служебного кода BOM не видно, но он там есть
На заметку: В редакторе Far manager, так же можно отключить создание BOM метки.
Все! Мы убедились, что при использовании кодировки UTF-8 ни каких проблем с русским языком, как в комментариях к коммитам, так и с просмотром русского текста в дельте логов, не возникает. И при этом не надо делать ни каких дополнительных настроек.
Исключение может составлять только если у вас есть файлы с русскими именами. Приведу примерчик. Создам файл Русский.txt. И посмотрим статус и содержимое каталога в консоли.
Вот как выводит консоль имена файлов на русском языке.
Чтобы это подправить дадим команду
$ git config --local core.quotepath false
И снова посмотрим статус и содержимое каталога в директории
Теперь Git стал нормально отображать русские названия файлов. А вот линуксовая утилитка ls с русским не подружилась (вернее сказать bash не подружился), но это ни какого отношения к Git не имеет.
Но если очень хочется то можно заставить ls выводить русские имена файлов правильно задав дополнительный ключик
$ ls --show-control-chars
Теперь добавим на наш файлик Русский.txt в индекс и закоммитим его. Потом добавим в этот файл строку и снова закоммитим. А затем посмотрим дельту
Как видим с русским языком снова все хорошо. То есть дополнительная настройка понадобилась только в том случае, когда есть файлы с названиями на русском языке.
Теперь настроим Git на работу с русской кодировкой Windows (CP 1251)
Создадим каталог CP1251 и Git репозитарий в нем. Затем создадим файлик Win.txt в стандартной кодировке Windows. Посмотрим статус, добавим этот файл в индекс и закоммитим его.
Напомню что все это дается с установками Git по умолчанию.
Теперь добавлю в файлик Win.txt еще одну строчку и закоммичю его, а затем посмотрим дельту, то есть разницу между первым и вторым коммитом.
И так смотрим разницу между коммитами
Ууууупс! Что за ерунда???? Видим что комментарии к коммитам отображаются правильно, так как они в юникоде (UTF-8), а вот содержимое файлов у нас идет кодами, что не очень то удобно, верней вообще не удобно. Это происходит потому, что вывод команды git log, так же происходит в UTF-8.
Попробуем поправить ситуацию. Дадим команду
$ git config --local core.pager "iconv.exe -f cp1251 -t utf-8 | less"
Данная команда переопределяет вывод пейджера (программы less, стандартной линуксовой программы постраничного вывода). Она конвертирует кодовую страницу cp1251 в UTF-8, как видно из синтаксиса команды iconv.exe.
iconv.exe идет вместе с дистрибутивом Git, поэтому нет смысла качать дистрибутив с сайта. Единственное ей могут понадобится дополнительные библиотеки, которые можно скачать тут. Нужно выбрать Dependencies (zip)
Теперь посмотрим еще раз дельту
Мы видим что теперь содержимое файлов в дельте отображается правильно, а вот комментарии к коммитам стали отображаться не правильно. Это произошло потому, что весь вывод команды git log, конвертируется и строчки комментариев были рассмотрены как-будто они в кодировке cp1251.
Попробуем исправить и это командами
$ git config --local i18n.commitEncoding utf8
$ git config --local i18n.logoutputencoding cp1251
Я несколько раз поправил файлик. Посмотрим два последних коммита и их дельту.
Как видно почти все отображается нормально. Исключение составляет только вывод после команды git commit (я его подчеркнул красной чертой и подсветил желтым). С этим можно конечно смирится если очень хочется вести проект в кодировке Windows CP1251. Как поправить этот маленький недочет я не знаю. Может кто подскажет – буду очень признателен.
Просто git log без дельты тоже выводит все нормально
Файл настроек Git для данного проекта CP1251 выглядит так:
Но вообще лучше вести проекты в UTF-8
Используя 1й метод (ведя проект в кодировке UTF8) как и где можно прописать, чтобы вместо ls --show-control-chars просто писать ls. Где-то же это, наверное можно прописать? Ведь оно фактически нужно всегда только в виде ls --show-control-chars на русской версии windows? Спасибо за ответ, заранее!
ОтветитьУдалитьКстати по поводу моего поста выше, команда git ls-files тоже выводит файлы с русскими буквами в названии корректно, не взирая в windows-1251 он или в UTF8 :)
ОтветитьУдалитьвот тут ответ http://pr0git.blogspot.ru/2015/02/git-bash.html
ОтветитьУдалитьls -l --color=tty --sort=extension --show-control-chars — и все равно видим крякозябры
ОтветитьУдалитьЧто за редактор тёплый ламповый такой?
ОтветитьУдалитьПохож на Borland 3.1
УдалитьДа похоже вы не жили в эпоху Win95 не говоря уже про PDP11.
УдалитьЭто Far Manager. Очень рекомендую
Здравствуйте!
ОтветитьУдалитьПодскажите, пожалуйста, а есть ли какой-нибудь способ заставить git grep искать текст на русском в файлах с кодировкой Win-1251?
Ни когда этим не озадачивался.
УдалитьЕсли кому-то ещё это интересно, мне на этот вопрос ответили на stackoverflow: https://stackoverflow.com/questions/63100662/how-to-use-git-grep-to-search-for-8-bit-encoded-text-in-a-files-with-the-same
УдалитьК меня FAR, файлы в utf-8, комментарии к комитам тоже на utf-8. Но команда >git log выводит на экран названия коммитов в виде .., как бы я не настраивал config. Есть работающий config для такого случая?
ОтветитьУдалитьАналогично. Никак не получается, чтобы и комментарии и файлы показывались кириллицей.
ОтветитьУдалитьСкачал версию 2.30 (64) - заработало!, в секцию [core] добавлено только quotepath = false
ОтветитьУдалитьСпасибо за рецептик
Удалить