Устранение проблем с русскими символами в git
Проблемы с русскими символами в git
Когда вы начнете работать с версией git под windows в командной строке, вы столкнётесь со следующей проблемой -- все сообщения git, в которых фигурируют русские символы будут нечитаемы. Имена файлов, на русском языке, будут выглядеть так -- "\362\345\361\362", а тексты коммитов примерно так -- <C8><ED><E8><F6><E8><E0><EB><E8><E7><E0><F6><E8><FF> <EF><F0><EE><E5><EA><F2><E0>. Т.е. исходная строка преобразуется в utf8 в соответствии с кодировкой latin1.Устранение проблем
Для примера я создал каталог rep на диске C:, создал в нем новый файл с именем тест и инициализировал новый репозиторий. После этого добавил в репозиторий все файлы из текущего каталога.Видно что файлы с русскими буквами, показываются не в той кодировке, в которой бы мы смогли их без проблем прочесть.C:\rep>git init Initialized empty Git repository in C:/rep/.git/ C:\rep>git add .
Чтобы исправить такое поведение git необходимо изменить параметр quotepath в секции [core], установив его в false.C:\rep>git status # On branch master # # Initial commit # # Untracked files: # (use "git add <file>..." to include in what will be committed) # # "\362\345\361\362" nothing added to commit but untracked files present (use "git add" to track)
quotepath = falseNB: Поменять можно либо глобальный файл настроек либо локальный. Глобальный файл настроек находится здесь C:\Program Files\Git\etc\gitconfig, локальный в каталоге репозитория .git\config. Следующая проблема возникает при редактировании описания коммита.
Если отредактировать и сохранить коммит в 8-битной кодировке, то появится следующее сообщение:C:\rep>git commit -a -s
Соответственно необходимо указать кодировку в которой будут вносится описания коммитов, в секции [i18n], параметр commitencodingWarning: commit message does not conform to UTF-8. You may want to amend it after fixing the message, or set the config variable i18n.commitencoding to the encoding your project uses. [master (root-commit) cc05f8a] ╚эшЎшрышчрЎш яЁюхъЄр Signed-off-by: maslakov <maslakov@mail.local> 1 files changed, 1 insertions(+), 0 deletions(-) create mode 100644 "\362\345\361\362"
commitencoding = cp1251Третья проблема, которая возникает при работе с консольным интерфейсом git в это вывод лога:
по умолчанию он выглядит такC:\rep>git log
Как показало вскрытие в этом "виновата" утилита less, убедить её показывать текст правильно поможет установка переменной окружения LESSCHARSET=koi8-r или можно просто указать в качестве вьювера утилиту cat. Чтобы текст показывался постранично, передать вывод утилиты cat утилите more. Кроме того необходимо задать параметр logoutputencoding в секции [i18n]commit cc05f8a470e8602ded60ba9c979c93148b334d4e Author: maslakov <maslakov@mail.local> Date: Tue Nov 10 12:37:38 2009 +0300 <C8><ED><E8><F6><E8><E0><EB><E8><E7><E0><F6><E8><FF> <EF><F0><EE><E5><EA><F2><E0> Signed-off-by: maslakov <maslakov@mail.local>
logoutputencoding = cp866В принципе, после установки вышеуказанных настроек, основные проблемы использования национальных языков, в 8-битyных кодировках, будут решены. Вот мой файл \.git\config
Текст коммитов я редактирую в far, поэтому параметр editor у меня определен как far -e Надеюсь кому-то данная информация будет полезна... UPD: спасибо Алексею Шумкину за дополнение[core] repositoryformatversion = 0 filemode = false bare = false logallrefupdates = true symlinks = false ignorecase = true quotepath = false pager = cat|more.com editor = far -e [i18n] commitencoding = cp1251 logoutputencoding = cp866
ashu> я нашёл решение для less
http://www.linuxcenter.ru/lib/books/kostromin/gl_11_05.phtml
вкратце - нужно установить переменную окружения LESSCHARSET=koi8-r (у меня под Cygwin 1.5 заработало)
UPD2: спасибо К сожалению, приведенные решения не помогли побороть проблему с выводом русских символов в выводе команд git diff, git show. К установленному Git в каталог bin скопировал iconv.exe, а в конфиг Git'а прописал: pager = iconv.exe -f cp1251 -t utf-8 | less файлы проекта у меня соответственно в кодировке cp1251. Файл iconv.exe можно найти скачав архив с бинарными файлами проекта iconv под Windows http://gnuwin32.sourceforge.net/packages/libiconv.htm. Дополнительно к нему понадобяться dll: libcharset1.dll libiconv2.dll (у меня уже был в установке Git, заменять не стал) libintl3.dll ( из архива Dependencies, оттуда же откуда качается iconv)