Pull to refresh

Особенности настройки git под windows

Reading time 3 min
Views 105K
Проблемы с русскими символами в 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-битных кодировках, будут решены.
Вот мой файл \.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
http://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)
Tags:
Hubs:
+16
Comments 39
Comments Comments 39

Articles