Обложка канала

Александр Кунташов — про 1С и не только

Заметки про разработку и смежные штуки. 1С, Битрикс24, 1Script, PHP, Linux, JS и другое

Александр Кунташов — про 1С и не только

7 лет назад
Открыть в
🔨 git diff и cp1251 (настройка пейджера)

Перевожу один древний веб-проект с CVS на GIT, а он в кодировке cp1251, т.к. создавался во времена, когда UTF-8 только-только входила в обиход. Сконвертировать проект в UTF-8 пока нельзя, т.к. продуктовый сервер тоже из тех времен и тоже не поддерживает правильной кодировки.

Чтобы diff в консоли выводился в UTF-8, в GIT можно задать свою команду вызова пейджера вот таким образом:

git config --local core.pager "iconv -f cp1251 -t utf-8 | less"

т.е. перед вызовом пейджера less я вызываю iconv для перекодировки вывода и ее результат уже через пайп отдаю пейджеру.

Но вот незадача: комментарии к коммитам у нас в проекте в UTF-8, чтобы в веб-интерфейсе сервера управления репозиториями (у нас GOGS) они отображались правильно. А указанная выше настройка пейджера действует глобально на все команды, в результате git diff у нас показывает русский текст правильно, а git log — кракозябры.

Оказывается, для каждой команды GIT'а пейджер можно настроить отдельно, в частности, для решения моей проблемы в дополнение к указанной выше настройке нужно сделать:

git config --local pager.log less

Т.е. для всех команд (diff, blame etc) выполняется конвертация из cp1251 в UTF-8, а для команды log конвертация не выполняется.

Пейджер можно вообще отключить, указав вместо команды пейджера значение false. Например, у нас список тэгов небольшой и удобнее, когда он сразу весь в консоль выводится, поэтому я пейджер для команды git tag отключил:

git config --local pager.tag false

Все настройки можно указать и вручную прямо в .git/config репозитория. Например, после выполнения указанных выше команд в этом файле настройки будут такие (все, что не относится к пейджингу, я пропускаю):

[core]
...
pager = iconv -f cp1251 -t utf-8 | less
...

[pager]
log = less
tag = false

#Инструменты #Лайфхак