git diff відображає кольори неправильно


46

Для того щоб отримати кольоровий вихід з усіх команд git, я встановив наступне:

git config --global color.ui true

Однак це дає такий результат для git diff,git log

git diff скріншот

тоді як команди, як git statusвідображення, добре

скріншот статусу git

Чому він не розпізнає втілені кольорові коди лише в деяких командах і як це можна виправити?

Я використовую iTerm 2 (термінальний тип xterm-256color) для OS X 10.8.2 і zsh як свою оболонку

zsh --version
zsh 5.0.0 (x86_64-apple-darwin12.0.0)

git --version                                                                                                                      
git version 1.7.9.6 (Apple Git-31.1)

Відповіді:


65

Ви бачите послідовності евакуації, які сповіщають термінал змінювати кольори, що відображаються символом втечі, показаним як ESC, тоді як бажаною поведінкою буде те, що послідовності відведення мають намічений ефект.

Такі команди, як git diffі git logтруби їх виведення в пейджер , lessза замовчуванням. Git намагається сказати, lessщоб дозволити контрольним символам мати свій ефект управління, але це не працює для вас.

Якщо lessваш пейджер, але змінна середовища LESSвстановлена ​​на значення, яке не включає -rабо -R, git не може вказати lessвідображати кольори. Він зазвичай проходить LESS=-FRSX, але не, якщо LESSвін вже встановлений в оточенні. Виправлення полягає в тому, щоб явно пропустити -Rопцію, щоб вказати lessна відображення кольорів, коли викликається git:

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

Якщо lessце не ваш пейджер, або перейдіть на, lessабо з’ясуйте, як зробити кольори дисплея пейджера.

Якщо ви не хочете, щоб git відображав кольори під час виклику пейджера, встановіть color.uiйого autoзамість true.


Ах, дякую. Хоча я знав, що lessпотрібно -Rвідображати кольори, я забув про це git logі git diffнаклав на нього вихід less. Дякую :)

5
Дякую! Я не помічав, що за замовчуванням ~/.profileу FreeBSD бувPAGER=more; export PAGER
Джеффрі Голдберг

Дякую. Я LESSналаштувався на те, -Kщо мені подобається вміти CTRL-Cвсе. Я думав, що це щось фанк із цією змінною, і тепер я знаю, як це виправити.
trysis

2

Поліпшуючи відповідь Гілла , ви можете зберегти свої старі $LESSпараметри, скориставшись цим у своєму git config (наприклад, у ~/.gitconfig):

[core]
pager = less -+$LESS -FRX

відповідь квазара хороша. У мене є LESS=-ibashrc, тому мені доведеться робити `[core] пейджер = менше $ МЕНШЕ -FR` Я вийняв X, тому що з X, мій існуючий вміст термінала стирається, я вважаю за краще, щоб вміст терміналу залишався.
Уейн Уокер

1

Ви також можете побачити цей вихід, якщо у вас є Busybox . Alpine Linux - хороший приклад популярного дистрибутива, який його використовує. Дивіться https://wiki.alpinelinux.org/wiki/Alpine_Linux:FAQ#How_to_enable.2Ffix_colors_for_git.3F

Простий спосіб дізнатися, чи ви зараз використовуєте Busybox, це запуск:

realpath `which less`

Або якщо ви використовуєте рибну шкаралупу

realpath (which less)

Якщо результат є /bin/busybox, то ви можете вирішити свою проблему, встановивши gnu менше .

На альпійських:

sudo apk --update add less

Команда буде різною залежно від вашого дистрибутива / менеджера пакунків.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.