Что означает git-config(1), когда он говорит, что цвета используются только тогда, когда вывод идет на терминал?

Я вывожу на терминал, но Git неправильно определяет, что я вывожу на терминал, для окрашивания вывода. Мой вопрос: что на самом деле означает git-config(1), когда он говорит, что «цвета используются только тогда, когда вывод идет на терминал» (эта фраза появляется в конце нескольких описаний конфигурации, таких как для color.ui и color .ветвь)? Другими словами, как Git решает, выводит ли он данные на терминал, и как мне изменить настройки среды, чтобы сообщить Git, что мой терминал действительно является терминалом?

Особенности:
Я использую терминал rxvt с Cygwin в Windows. У меня также установлен MSysGit. Когда я делаю настройки конфигурации Git:

[color]
    ui = auto
    branch = auto
    status = auto

в моем выводе терминала все еще нет цвета. Однако, когда я переключаюсь на

[color]
    ui = always
    branch = always
    status = always

тогда есть правильный цветной вывод. Однако мне нужно вернуться к «авто», а не «всегда», чтобы правильно обрабатывать фактические нетерминальные случаи. Итак, чтобы заставить «авто» работать правильно: как мне изменить свою среду, чтобы Git распознал, что мой rxvt + Cygwin является терминалом, способным поддерживать цвет?

(PS. Я не могу использовать версию Git для Cygwin из-за гораздо более серьезных проблем, чем эта относительно незначительная проблема с цветом. Пожалуйста, не отвечайте, говоря мне, чтобы я переключился на версию Cygwin.)

Спасибо за вашу помощь!


person walrus    schedule 26.08.2012    source источник
comment
Какова ваша переменная окружения TERM? (Уточните у echo $TERM.)   -  person ezod    schedule 26.08.2012
comment
@ezod: я пытался изменить TERM на несколько разных значений, и это не дало никакого эффекта. Текущее значение (то есть последнее значение, которое я пробовал) — xterm-256color.   -  person walrus    schedule 26.08.2012


Ответы (1)


Возможно, стоит взглянуть на этот вопрос, который охватывает обнаружение разницы между выводом, поступающим на терминал (т.е. сеанс tty), и его перенаправлением в другой процесс. Я предполагаю, что это то, что git означает в своей формулировке «переход к терминалу», что вывод на самом деле идет в сеанс tty.

person Mark Fisher    schedule 26.08.2012
comment
Я только что провел эти тесты в своем терминале, и, конечно же, он был правильно определен как терминал. Так что Git (ну, MSysGit) по-прежнему остается единственной известной мне вещью, которая не считает мой терминал терминалом. Вздох. - person walrus; 26.08.2012