Git и решение проблем с именами файлов в кодировке Unicode
Когда-то давно, когда я только начинал делать OutWiker, исходники этой программы я выкладывал на github. Но оказалось, что у git в то время были большие проблемы с именами файлов, содержащих не латинские буквы (подробнее об этом я в свое время писал в посте Git, Bazaar и русские имена файлов), из-за чего пришлось перейти на Bazaar.
После этого обычно спрашивают, зачем вообще в исходниках могут понадобиться такие файлы? Применительно к OutWiker по двум причинам. Первая — для хранения справки по программе, которая создана в формате заметок OutWiker, поэтому каждая страница хранится в папке с именем, соответствующим заголовку страницы. Вторая причина — для тестов. Надо же проверять, что программа справится с чтением файлов с такими именами.
На днях решил посмотреть, как обстоят дела с этой проблемой сейчас, и оказалось, что прошло уже больше года, как проблему побороли, начиная версии git 1.7.10. На этот счет на сайте msysgit (реализации git под Windows) есть даже статья на эту тему. В ней написано, что нужно сделать, чтобы git мог нормально работать с файлами в кодировке Unicode, и как перекодировать уже существующий репозиторий в юникодный формат представления файлов.
Полностью статью пересказывать я не буду, скажу только, что главное разобраться с несколькими настройками. Во-первых, нужно отключить представление имен файлов в кодировке Unicode в виде кодов символов, то есть в виде «\nnn\nnn…». Для этого надо выполнить следующую команду:
git config —global core.quotepath off
или вручную поправить файл конфига .gitconfig, добавив туда следующую строку в раздел [core]:
[core]
quotepath = off
Также теперь в git стало проще писать комментарии к коммитам на русском языке. Когда-то давно в статье Использование Git (с момента написания той статьи в git многое изменилось в лучшую сторону) я писал о том, что нужно сделать, чтобы комментарии на русском языке под Windows нормально воспринимались (под Linux’ом уже тогда все было нормально). Раньше нужно было установить параметры i18n.commitencoding и i18n.logoutputencoding в нужные кодировки. Теперь этого не требуется, более того, эти параметры стали вредными, и их лучше вообще удалить, выполнив команды
git config —global —unset i18n.commitencoding
git config —global —unset i18n.logoutputencoding
По умолчанию будет использоваться кодировка utf-8, но теперь git под Windows это не смутит, несмотря на то, что виндовая консоль по умолчанию использует для вывода кодировку 866 (привет, DOS), а для ввода cp1251. Теперь с кодировками будет разбираться git.
Я попробовал добавлять файлы с русскими буквами в имени под Windows и Linux, и действительно, проблем больше нет. Комментарии к коммитам на русском языке тоже отправляются и отображаются нормально в разных операционках.
Теперь я даже задумался, а не перевести ли мне OutWiker обратно на github. С одной стороны в git мне больше нравится работа с ветками (в bzr каждая ветка хранится в отдельной папке, а не переключается в одной папке, как в git), но в то же время во всем остальном bzr меня вполне устраивает, а процесс коммита в нем мне нравится даже больше из-за того, что в консоли приходится вводить на несколько символов меньше, чем в git.
PS. Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.
Leave a comment