Программирование ARM Git: кодирование символов для сообщений commit Wed, November 13 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.


Git: кодирование символов для сообщений commit Печать
Добавил(а) microsin   

Когда Git создает и сохраняет commit, сообщение commit, которое введено пользователем, сохраняется как двоичные данные, без какого-либо преобразования между кодировками символов текста. Кодирование Вашего сообщения commit определятся клиентом, который используете для составления сообщения commit.

Однако Git при этом сохраняет имя кодировки commit, если установлен ключ конфигурации "i18n.commitEncoding" (и если не используется для него значение по умолчанию "utf-8"). Вы можете вывести его текущее значение следующей командой:

$ git config i18n.commitEncoding

Если после этой команды никакого вывода не последовало, то значит по умолчанию для этого ключа установлено "utf-8".

Если Вы сделали commit через командную строку, то это значение должно соответствовать кодировке, установленной для командной строки (encoding set shell environment). Иначе "неправильная" кодировка, сохраненная в commit приведет к мусорному выводу (кракозябры или HEX-значения в угловых скобках) лога (истории commit) в ответ на команду git log. Пример:

$ git log
commit f2459c4624ef818e06959ba5fe4c15c1e37d35d4 (HEAD -> main)
Author: gituser < gu@domain.ru>
Date:   Fri Jan 28 16:09:49 2022 +0300
 
   220127 Ð< 98>Ñ< 81>пÑ< 80>авил влево-впÑ< 80>аво длÑ< 8F>
      Ñ< 81>обÑ< 81>Ñ< 82>венного ID
 
commit 93daeff2400033f00e5adbf04fb68cab27e7f9ff
Author: gituser < gu@domain.ru>
Date:   Fri Jan 28 16:07:38 2022 +0300
 
   220123 Ð< 98>Ñ< 81>пÑ< 80>авление множеÑ< 81>Ñ< 82>ва 
      Ñ< 80>ежимов, знакогенеÑ< 80>аÑ< 82>оÑ< 80>ов
      длÑ< 8F> Ñ< 91>, добавил кнопки TX и RX
 
commit 509c2f29d919624d3b333fb819a08d94676652bd
Author: gituser < gu@domain.ru>
Date:   Fri Jan 28 16:05:19 2022 +0300
 
   220128 Ð< 98>Ñ< 81>пÑ< 80>авил DEL, добавил индикаÑ
      < 82>оÑ< 80< 80> РУС-ENG-dig
 
commit 6c432e5613e0f099ec575833c5aabbc63e681df6
Author: gituser < gu@domain.ru>
Date:   Fri Jan 28 16:01:53 2022 +0300
 
   220115 Ð< 98>Ñ< 81>пÑ< 80>авление Ñ< 80>ежимов под
      клавиаÑ< 82>Ñ< 83>Ñ< 80>Ñ< 83> TCA8418
 
:

Tower [1] принудительно использует кодировку UTF-8 для commit-ов (независимо от того, что установлено ключом "i18n.commitEncoding"), чтобы гарантировать правильное кодирование и отображение commit.

В командной строке Вы можете проверить свою кодировку следующей командой (работает в git shell):

$ locale
LANG=en_US
LC_CTYPE="en_US"
LC_NUMERIC="en_US"
LC_TIME="en_US"
LC_COLLATE="en_US"
LC_MONETARY="en_US"
LC_MESSAGES="en_US"
LC_ALL=

Этот вывод показывает текущие настройки кодировки символов. Дополнительно, когда используется Terminal, вы должны убедиться, что предпочтительная кодировка также правильно задана в настройках.

Вы можете установить свою предпочтительную кодировку следующими строками в своем профиле shell:

export LANG="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"

Примечание: лучше настроить среду оболочки на UTF-8, чем конфигурацию Git, поскольку рекомендуется использовать UTF-8.

[Решение проблемы с отображением текста UTF8]

Как уже упоминалось, команда git log использует для отображения текста кодировку, которая установлена в настоящий момент для командной строки (bash или cmd). Чтобы правильно отображался текст в кодировке UTF8, необходимо установить переменную окружения LC_ALL в значение C.UTF-8, для чего в Windows достаточно выполнить команду:

set LC_ALL=C.UTF-8

После этого для текущей сессии русский текст UTF8 будет отображаться правильно:

$ git log
commit f2459c4624ef818e06959ba5fe4c15c1e37d35d4 (HEAD -> main)
Author: gituser < gu@domain.ru>
Date:   Fri Jan 28 16:09:49 2022 +0300
 
    220127 Исправил влево-вправо для курсора при редактировании собственного ID
 
commit 93daeff2400033f00e5adbf04fb68cab27e7f9ff
Author: gituser < gu@domain.ru>
Date:   Fri Jan 28 16:07:38 2022 +0300
 
    220123 Исправление множества режимов, знакогенераторов для ё, добавил кнопки TX и RX
 
commit 509c2f29d919624d3b333fb819a08d94676652bd
Author: gituser < gu@domain.ru>
Date:   Fri Jan 28 16:05:19 2022 +0300
 
    220128 Исправил DEL, добавил индикатор РУС-ENG-dig
 
commit 6c432e5613e0f099ec575833c5aabbc63e681df6
Author: gituser < gu@domain.ru>
Date:   Fri Jan 28 16:01:53 2022 +0300
 
    220115 Исправление режимов под клавиатуру TCA8418
 
commit 65b292b712292b7ed6e88b7e5e2eadea480a52e9
Author: gituser < gu@domain.ru>
Date:   Fri Jan 28 16:00:18 2022 +0300
 
    220111 Исправил ошибку обработки ~INT. Клавиатура TCA8418 на низком уровне работает
 
commit 9048b714cbd83d3c3edffb5f8890ef9c935ef027
Author: gituser < gu@domain.ru>
Date:   Fri Jan 28 15:57:52 2022 +0300
 
    220110 Продолжение работы над TCA8418
 
:

Для того, чтобы эту настройку запомнить навсегда для текущего пользователя, необходимо настроить для него переменную окружения LC_ALL. В Windows это делается с помощью утилиты Свойства системы -> Закладка Дополнительно -> кнопка "Переменные среды...".

В Windows 10 это окно можно запустить, если ввести в строке поиска утилит "Изменение системных переменных среды".

git log UTF8 add environment variable LC ALL fig01

git log UTF8 add environment variable LC ALL fig02

После нажатия на кнопку "Переменные среды..." запустится диалог, где можно добавить переменную окружения LC_ALL и присвоить ей значение LC_ALL=C.UTF-8.

git log UTF8 add environment variable LC ALL fig03

git log UTF8 add environment variable LC ALL fig04

Просмотр истории commit и кодировки. Если Вы выводите лог commit (например, командой git log или git log --pretty=oneline) в командной строке, то значение конфигурации "i18n.logOutputEncoding" (или значения по умолчанию для "i18n.commitEncoding") должно соответствовать кодировке символов в командной строке. Команда в командной строке преобразует сообщений из кодировки commit в кодировку выводимых символов. Если кодировка командной строки (консоли) не совпадает с кодировкой вывода, то получится мусорный, не читаемый вывод!

Однако если сообщение commit сохранено в неправильной кодировке, и просматривается тоже в этой неправильной кодировке, то сообщение commit будет показано правильно. Несмотря на то, что все может хорошо и нормально работать в Вашей текущей системе, не факт, что если Вы передадите свой репозиторий кому-нибудь еще, что у него не будет мусорного вывода в ответ на попытку просмотра сообщений commit.

Когда у commit неправильная кодировка, нет надежного способа обнаружить это и исправить кодировку в момент, когда commit просматривается сторонним пользователем. Если возможно, попробуйте заново создать commit с правильной кодировкой, повторно выполнив его.

[Ссылки]

1. Character encoding for commit messages site:git-tower.com.
2Git: просмотр истории фиксаций.
3. git log output encoding issues on Windows 10 CLI terminal site:stackoverflow.com.

 

Добавить комментарий


Защитный код
Обновить

Top of Page