Обновление февраль 2017 г. (Git 2.12): таблица ширины символов обновлена для соответствия Юникод 9.0 .
update_unicode.sh
означает , переместив его в contrib/update-unicode
: см. README .
Обновление от августа 2014 г. (git 2.1): commit a67c821 ( Torsten Bögershausen (tboegi) ) добавляет поддержку Unicode 7.0.
Обновление апрель 2014: commit d813ab9 ( Torsten Bögershausen (tboegi) ) добавляет поддержку Unicode 6.3
(git 1.9.2):
Unicode 6.3 определяет больше кодовых точек как комбинацию или акценты .
Например, символ "ö
" может быть выражен как "o
", за которым следует U+0308 COMBINING DIARESIS
(он же умлаут, двойная точка сверху).
Мы должны учитывать, что такая последовательность из двух кодовых точек занимает один столбец отображения для целей выравнивания, и для этого git_wcwidth()
должен возвращать 0 для них.
Затронутые кодовые точки:
U+0358..U+035C
U+0487
U+05A2, U+05BA, U+05C5, U+05C7
U+0604, U+0616..U+061A, U+0659..U+065F
Ранее стандарты Unicode определяли их как "зарезервированные".
Только диапазон 0..U+07FF
был проверен, чтобы увидеть, какие кодовые точки должны быть помечены как 0-width при подготовке к этой фиксации; может потребоваться больше обновлений.
Обновление апрель 2012: поддержка Unicode выпущена в версии 1.7.10. См. на этой странице для заметок и настроек, которые следует установить.
А именно:
git config [--global] core.quotepath off
git config [--global] i18n.logoutputencoding utf8
git config [--global] i18n.commitencoding utf8
git config [--global] --unset svn.pathnameencoding
Команда recodetree check
сканирует всю историю репозитория git и печатает все имена файлов, не относящиеся к ASCII. Если выходные данные пусты, миграция не требуется.
Обновление февраль 2012: исправления для поддержки UTF-8 поступают в ветку 'devel' msysgit repo на GitHub , включая Обновление без настроек для UTF-8 .
На странице Git для Windows Google+ упоминается:
Karsten Blees 'Патчи UTF-8 для Git для Windows теперь объединены в' devel
'.
Это означает, что следующий выпуск будет поддерживать имена файлов Unicode!
май 2011
Я полагаю, что проблема msysgit 80 содержит последнюю версию этой ошибки.
Также описано в выпуске 376 .
Например:
Вот что происходит:
git в Windows работает с именами файлов и обрабатывает их по существу как байтовые потоки.
В вашем случае потоки представляют собой текст в кодировке UTF8.
git в Windows просит среду выполнения создать файл и передает ему поток байтов.
Поскольку внутренне в Windows все Unicode, среда выполнения преобразует байт
поток в UTF16, используя текущую локаль (кодовая страница).
То есть он эффективно интерпретирует поток байтов как текст в кодировке CP949 (корейский).
По-видимому, некоторые из байтовых последовательностей UTF8 являются недопустимыми последовательностями CP949, и преобразование завершается неудачно («Неверный аргумент»); или если последовательности UTF8 оказываются правильными последовательностями CP949, результатом является (скорее всего) другой символ.
Истинное исправление должно быть на MingW, хотя :
Мне приходит в голову, что одно решение будет таким: решить его во время выполнения GCC C
уровень библиотеки.
То есть, для библиотеки времени выполнения mingw GCC в Windows с помощью параметров времени сборки можно находиться в режиме, в котором параметры командной строки (переданные в main()
) и функции файлового ввода-вывода используют базовую Windows Вызовы API Unicode и перевод в / из кодировки UTF-8 в стандартных API функций C, которые используют строки байтов.
Это, возможно, "просто работает" для git и может быть полезно для других проектов Linux с открытым исходным кодом, работающих под управлением среды Windows.
ak2 комментирует, что MingW не подходящее место для этого исправления:
"Компиляторы MinGW обеспечивают доступ к функциональности среды выполнения Microsoft C и некоторым языковым средам исполнения.
MinGW, будучи минималистом, не пытается и никогда не попытается предоставить среду выполнения POSIX для развертывания приложений POSIX в MS-Windows.
Если вы хотите развертывать приложения POSIX на этой платформе, рассмотрите Cygwin. "
В версии msysgit для поддержки Unicode .
идет работа.