24 мая 2013 г.

Git + кириллические имена файлов на OS X

Не ожидал, что в мире современного ПО могут быть проблемы с Unicode. Мне казалось, что все неприятности с кодировками закончились с приходом Unicode'а. Давно по крайней мере с ними не встречался. Но, как оказалось, git несколько некорректно работает с русскими именами файлов на Mac'е.

Есть у меня репозиторий, в котором я храню все свои заметки. Половина из них была написана в muse-mode, остальное в Markdown. Соответственно имена файлов с текстом содержат заголовки, содержащие кириллицу. Мне так удобнее. Ранее с таким подходом ни разу проблем не встречал.

И вот проблема на Mac'е. Все русские буквы в выводе git status отображаются в восьмеричном виде. И более того все файлы содержащие в именах кириллицу помечаются как untracked. Пример:

$ izonov:text izonov$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#   (use "git push" to publish your local commits)
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   "linux/2013-05-24 - Git + \320\272\320\270\321\200\320\270\320\273\320\273\320\270\321\207\320\265\321\201\320\272\320\270\320\265 \320\270\320\274\320\265\320\275\320\260 \321\204\320\260\320\271\320\273\320\276\320\262 \320\275\320\260 OS X.md"
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   "linux/2013-05-24 - Git + \320\272\320\270\321\200\320\270\320\273\320\273\320\270\321\207\320\265\321\201\320\272\320\270\320\265 \320\270\320\274\320\265\320\275\320\260 \321\204\320\260\320\270\314\206\320\273\320\276\320\262 \320\275\320\260 OS X.md"
#   .....

Вторая проблема (untracked файлы) решается достаточно легко. Подсмотрено в вопросе на Stackoverflow:

git config --global core.precomposeunicode true

После этого видим следующее:

$ izonov:text izonov$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#   (use "git push" to publish your local commits)
#
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#   modified:   "linux/2013-05-24 - Git + \320\272\320\270\321\200\320\270\320\273\320\273\320\270\321\207\320\265\321\201\320\272\320\270\320\265 \320\270\320\274\320\265\320\275\320\260 \321\204\320\260\320\271\320\273\320\276\320\262 \320\275\320\260 OS X.md"

Решения отображения русских букв в git status я не нашел. Кириллические символы в именах новых и измененных файлов все равно отображаются в восьмеричном виде. Как вариант можно использовать git add -i. Там все символы отображаются в привычном виде.

P.S. [2013-05-28]: Вчера Konstantin Khomoutov подсказал, как решить проблему отображения русских букв в git:

git config --global core.quotepath false

Комментариев нет: