MyTetra Share
Делитесь знаниями!
Особенности настройки git под windows
Время создания: 16.03.2019 20:47
Текстовые метки: git windows cp1251 cp866 less iconv
Раздел: 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 .


Видно что файлы с русскими буквами, показываются не в той кодировке, в которой бы мы смогли их без проблем прочесть.

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)


Чтобы исправить такое поведение git необходимо изменить параметр quotepath в секции [core], установив его в false.

quotepath = false


NB: Поменять можно либо глобальный файл настроек либо локальный.


Глобальный файл настроек находится здесь C:\Program Files\Git\etc\gitconfig, локальный в каталоге репозитория .git\config.


Следующая проблема возникает при редактировании описания коммита.

C:\rep>git commit -a -s


Если отредактировать и сохранить коммит в 8-битной кодировке, то появится следующее сообщение:

Warning: 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"


Соответственно необходимо указать кодировку в которой будут вносится описания коммитов, в секции [i18n], параметр commitencoding

commitencoding = cp1251


Третья проблема, которая возникает при работе с консольным интерфейсом git в это вывод лога:

C:\rep>git log


по умолчанию он выглядит так

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>


Как показало вскрытие в этом «виновата» утилита less, убедить её показывать текст правильно поможет установка переменной окружения LESSCHARSET=koi8-r или можно просто указать в качестве вьювера утилиту cat. Чтобы текст показывался постранично, передать вывод утилиты cat утилите more.

Кроме того необходимо задать параметр logoutputencoding в секции [i18n]

logoutputencoding = cp866


В принципе, после установки вышеуказанных настроек, основные проблемы использования национальных языков, в 8-битyных кодировках, будут решены.

Вот мой файл \.git\config

[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


Текст коммитов я редактирую в far, поэтому параметр editor у меня определен как far -e


Надеюсь кому-то данная информация будет полезна…


UPD: спасибо Алексею Шумкину за дополнение

ashu> я нашёл решение для less

www.linuxcenter.ru/lib/books/kostromin/gl_11_05.phtml

вкратце - нужно установить переменную окружения LESSCHARSET=koi8-r (у меня под Cygwin 1.5 заработало)


UPD2: спасибо hokum за дополнение

К сожалению, приведенные решения не помогли побороть проблему с выводом русских символов в выводе команд git diff, git show.


К установленному Git в каталог bin скопировал iconv.exe, а в конфиг Git'а прописал:

pager = iconv.exe -f cp1251 -t utf-8 | less

файлы проекта у меня соответственно в кодировке cp1251.


Файл iconv.exe можно найти скачав архив с бинарными файлами проекта iconv под Windows gnuwin32.sourceforge.net/packages/libiconv.htm.

Дополнительно к нему понадобяться dll:

libcharset1.dll

libiconv2.dll (у меня уже был в установке Git, заменять не стал)

libintl3.dll ( из архива Dependencies, оттуда же откуда качается iconv)

 
MyTetra Share v.0.53
Яндекс индекс цитирования