Цвет ANSI в git отображается неправильно - PullRequest
59 голосов
/ 13 декабря 2011

Недавно я переключился на SLES 11. Я нашел проблему для команды git. Все цвета ANSI не могут быть отображены. Вместо этого он показывает код ANSI, как это:

* ESC [33m * коммит 0a02124a0fd85c1f0094bcdf15bac1645e3c8630ESC [м

примечание: цвет ansi в 'ls' работает очень хорошо.

Ответы [ 8 ]

65 голосов
/ 13 декабря 2011

Попробуйте установить переменную среды LESS для включения опции -R:

LESS=-R git grep ...

Если это работает, добавьте export LESS=-R в ~/.bashrc или ~/.profile или аналогичный файл запуска оболочки.

   -R or --RAW-CONTROL-CHARS
          Like -r, but only ANSI "color" escape sequences are
          output in "raw" form.  Unlike -r, the screen
          appearance is maintained correctly in most cases.
          ANSI "color" escape sequences are sequences of the
          form:

               ESC [ ... m

          where the "..." is zero or more color specification
          characters
28 голосов
/ 13 декабря 2011

Проблема, как отмечали другие, в том, что с вашим терминалом все в порядке, но когда Git вызывает пейджер, он неправильно интерпретирует цветовые коды ANSI.

Я бы начал с , отключив LESS в вашей среде; Похоже, вы ранее настраивали его на что-то, что мешает Git. Если это решит, то вы здесь. Если вам действительно нужно настроить LESS, обратите внимание, что Git начинается с FRSX по умолчанию, поэтому будьте осторожны с изменением их, если вам не нужно.

Если вы делаете по какой-либо причине хотите, чтобы LESS в вашей среде отличался от того, что вы хотите для Git, идеальный способ справиться с Git и пейджером - через конфигурационную переменную core.pager. Цитировать справочную страницу:

Команда, которую git будет использовать для разбиения на страницы вывода. Может быть переопределено переменной среды GIT_PAGER. Обратите внимание, что git устанавливает для переменной среды LESS значение FRSX, если оно не установлено при запуске пейджера. Можно изменить эти настройки, установив переменную LESS в другое значение. Кроме того, эти параметры могут быть переопределены на проекте или глобальном уровне, установив параметр core.pager. Настройка core.pager не влияет на поведение переменных среды LESS, описанное выше, поэтому, если вы хотите переопределить настройки git по умолчанию таким образом, вам нужно быть явным. Например, чтобы отключить опцию S обратно совместимым образом, установите для core.pager значение less -+$LESS -FRX. Это будет передано оболочке с помощью git, которая переведет последнюю команду в LESS=FRSX less -+FRSX -FRX.

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

19 голосов
/ 26 июня 2013

В git вы можете изменить пейджер на использование опции -R:

git config --global core.pager "less -R"
6 голосов
/ 19 декабря 2013

Для меня это не сработало:

git config --global core.pager less -R

Поэтому вместо этого я добавил следующее в мой файл ~ / .gitconfig

 [core]
     pager = less -R

Чтобы проверить это, я сделал

git log --graph --pretty=format:"%C(yellow)%h%Creset%C(blue)%d%Creset %C(white bold)%s%Creset %C(white dim)(by %an %ar)%Creset" --all

4 голосов
/ 13 декабря 2011

ОК, я понял.Эта проблема связана с переменной LESS.

, следующая строка решает эту проблему:

export LESS="-erX"
1 голос
/ 19 апреля 2016

У меня была такая же проблема. Но почему мне нужно настроить git на одной машине, а на другой нет необходимости? Я хочу исправить источник проблемы, потому что

git config --global core.pager "less -R"

выглядит для меня как обходной путь.

0 голосов
/ 18 июля 2019

Кто бы здесь ни находился, в моем случае это было решено установкой для core.pager пустой строки вместо ее сброса:

git config --global core.pager ''

Это было от https://git -scm.com / book / en / v2 / Настройка-Git-Git-Configuration

0 голосов
/ 04 марта 2016

У меня была похожая проблема с escape-последовательностями цветов ANSI в Git для Windows v2.7.1 в консолях Laravel Artisan и Symfony.Здесь упомянутое решение LESS не решило проблему.

Поскольку Git для Windows открывает терминал с bash --login -i, эта строка, введенная после запуска терминала, сработала для меня:

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