Git проблемы с выходом журнала в командной строке Windows 10

Проблема

Как сделать вывод команды git log правильно отображаемым в командной строке Windows?

Пример

git последовательность команд, приводящих к проблеме Как вы можете видеть, я могу ввести диакритические символы правильно, но на git log выход каким-то образом экранирован. В соответствии с таблицей кодирования UTF-8 коды между угловыми скобками (< и >) с выхода соответствуют ранее введенному типу git config параметров.

Я попытался установить переменную окружения LESSCHARSET на UTF-8 как sugested в один из ответов на подобную проблему, но затем результат искажен:

git выход журнала после установки LESSCHARSET = utf8

Я знаю, что .git/config правильно закодирован с помощью UTF-8, поскольку он обрабатывается gitk, как ожидалось.

Правильный вывод gitk

Ниже приведен командный вывод locale

LANG=
LC_CTYPE="C.UTF-8"
LC_NUMERIC="C.UTF-8"
LC_TIME="C.UTF-8"
LC_COLLATE="C.UTF-8"
LC_MONETARY="C.UTF-8"
LC_MESSAGES="C.UTF-8"
LC_ALL=

EDIT:

Выход такой же и в чистом git - bash:

введите описание изображения здесь

поэтому я считаю, что проблема не зависит от оболочки и относится к Git или к самой ее конфигурации.

Ответы

Ответ 1

Хорошо, я немного экспериментировал и обнаружил, что командам Windows Git действительно нужны переменные UNIX, такие как LC_ALL, чтобы правильно отображать польские (или другие символы UTF-8). Просто попробуйте эту команду:

set LC_ALL=C.UTF-8

Получите результат. Вот что произошло на моей консоли (шрифт "Консола", нет chcp):

Консоль Windows CMD


Update:

  • Хорошо, для того, чтобы команды Windows, такие как type (отображаемый файл на консоли), работали правильно, вам нужно chcp 65001.
  • И если вы предпочитаете команды из Git Bash, например cat, вы получаете выгоду от вышеупомянутого set LC_ALL=C.UTF-8.

Консоль Windows CMD, часть 2


Обновление 2: Как сделать изменения постоянными

Как сказал пользователь blaine mono, создайте переменную окружения LC_ALL и присвойте ей значение C.UTF-8, либо глобально, либо только для вашего собственного профиля пользователя (извините за немецкий снимок экрана):

Создать переменную среды

В следующий раз, когда вы откроете консоль процессора команд (cmd.exe), вы увидите значение переменной при выдаче команды echo %LC_ALL%. В PowerShell вы должны увидеть это при выпуске $env:LC_ALL.

Самый простой способ сделать кодовую страницу UTF-8 постоянным и открыть regeedit и добавить новое значение с именем Autorun строки типа в раздел HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor и присвойте ему значение chcp 65001.

Редактор регистрации

В дальнейшем эта команда будет выполняться каждый раз при открытии новой консоли cmd.exe. Вы даже видите его выход в новом окне: "Aktive Codepage: 65001." (или аналогичный на вашем родном языке).

О, кстати: для корректного отображения кодированного файла UTF-8 в PowerShell вы можете использовать Get-Content -encoding UTF8 file.txt или cat -encoding UTF8 file.txt (cat как псевдоним для Get-Content в PowerShell).

Ответ 2

Если кто-то заинтересован в эквиваленте PowerShell set LC_ALL=C.UTF-8, то есть:

$env:LC_ALL='C.UTF-8'

Однако это работает только для текущего сеанса. Чтобы сделать его постоянным, создайте переменную среды с именем LC_ALL со значением C.UTF-8.

Ответ 3

Мне пришлось использовать командную строку windows powershell вместо стандартной (Windowkey + X)

Ответ 4

Я использую git bash на WIN10. Что касается меня, 4 настройки делают появление как мое ожидание.

  • настройка env. Добавьте LC_ALL=C.UTF-8, LESSCHARSET=UTF-8 чтобы env глобально.

  • git git config --global i18n.logOutputEncoding utf-8.

  • настройка git bash. Установите Options-> Text-> Character set в utf-8.

Готово.