Як розфарбувати вихід git?


255

Чи є спосіб кольорового виведення для git (або будь-якої команди)?

Поміркуйте:

baller@Laptop:~/rails/spunky-monkey$ git status
# On branch new-message-types
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   app/models/message_type.rb
#
no changes added to commit (use "git add" and/or "git commit -a")
baller@Laptop:~/rails/spunky-monkey$ git add app/models

І

baller@Laptop:~/rails/spunky-monkey$ git status
# On branch new-message-types
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       modified:   app/models/message_type.rb
#

Вихід виглядає так само, але інформація зовсім інша: файл перейшов від нестандартного до поетапного для фіксації.

Чи є спосіб розфарбувати вихід? Наприклад, файли, які не позначені, червоні, а поетапні - зелені?

Або навіть Changes not staged for commit:до червоного і # Changes to be committed:до зеленого?

Працює в Ubuntu.

EDIT: Googling знайшов відповідь , який прекрасно працює: git config --global --add color.ui true.

Однак чи є якесь загальне рішення для додавання кольору до командного виводу?


1
Вам потрібно щось, що забарвлює всі команди команд? Як би знати, які деталі фарбувати?
Майкл Мрозек

Я думаю, якби існував спосіб налаштувати його за допомогою регулярного виразу: Кожен колір міг би мати стартовий регулярний вираз. І може бути кольоровий регулярний вираз для вимкнення всіх кольорів. І якщо з'явиться текст "foo", покажіть його у певному кольорі ...
B Сім

Відповіді:


268

Ви можете створити розділ [color]у своєму, ~/.gitconfigнаприклад, із наступним вмістом

[color]
  diff = auto
  status = auto
  branch = auto
  interactive = auto
  ui = true
  pager = true

Ви також можете чітко контролювати те, що ви хочете, щоб кольоровим кольором, наприклад, наприклад

[color "status"]
  added = green
  changed = red bold
  untracked = magenta bold

[color "branch"]
  remote = yellow

Я сподіваюся, що з цього ви почнете працювати. І звичайно, вам потрібен термінал, який підтримує колір.


14
Я думаю, що, можливо, варто поставити git config --global color.ui auto (@ відповідь Євгена) у верхній частині вашої ... Я думаю, що це, мабуть, те, що більшість людей шукає. Я підтримав і те і інше. Я просто кажу, що заради Інтернету, оскільки він приходить сюди, я думаю, що багато людей просто хочуть цього простого лайнера. Ще краще, якщо вони його отримають, плюс ваша додаткова доброта.
msouth

Це прекрасно працювало для мене - у [color "status"]розділі, який я додав branch = yellow.
Уейн Вернер

3
Ви можете додати розділ [color] до файлу .git / config проекту також
andrej

А можна просто встановити змінну конфігурації для одного виклику команди мерзотника: stackoverflow.com/a/18304605/134044
NeilG

220

Ви, мабуть, хочете використовувати

git config --global color.ui auto

У autoчастині йдеться про те, що git буде намагатися використовувати колір лише на терміналах, які його підтримують, і ви не отримаєте послідовності ANSI, якщо, наприклад, переймете вихід команд git у файл. Встановити його trueтак само auto, як і це також за замовчуванням, оскільки Git 1.8.4.

Це color.uiмета-конфігурація, яка включає всі різні color.*конфігурації, доступні з командами git.

Це пояснюється поглиблено в git help config.


Чи можете ви пояснити різницю між кольором.ui true(на який autoвказує) порівняно always? Я читаю документи, але різниці не розумію.
chharvey

19
git config --global color.ui auto
git config --global color.branch auto
git config --global color.status auto

FYI, тільки це працювало для версії git 1.5.2.1, інші відповіді не відповіли.
AbhiNickz

14

Прийнята відповідь дає найбільш поширене рішення. Якщо з будь-якої причини вам не потрібно постійно змінювати конфігурацію, що це рішення робить, ви можете змінити конфігурацію для однієї команди git:

git -c color.ui=always <usual git command and options>

Наприклад:

git -c color.ui=always status
git -c color.ui=always diff

Тестовано: підтримується на git 2.4.6, не підтримується у git 1.7.1.


2
Для всіх, хто намагається отримати колір під час підключення до такого, lessяк я щойно був, ви можете змусити lessпередати символи втечі кольору до терміналу через less -R.
xdhmoore

Коли ця функція була додана?
Ondra Žižka

11
git config --global color.ui always
git config --global color.branch always
git config --global color.diff always
git config --global color.interactive always
git config --global color.status always
git config --global color.grep always
git config --global color.pager true
git config --global color.decorate always
git config --global color.showbranch always

1

Це можна зробити за допомогою Кольорового виводу команди довільної команди . Це в основному працює, але я не зрозумів, як обійти помилку, де не відображаються підказки, які очікують на введення, і ви не можете просто ввести відомий необхідний ввід і натисніть клавішу Enter, щоб продовжити в кожному випадку.

Приклад ~/.acoc.confдля git:

# git
[git/ae]
/.*(error:.*)/                                    red+bold
/.*(warning:.*)/                                  yellow
/.*(hint:.*)/                                     magenta
/.*(up-to-date).*/                                green+bold
/.*(nothing to commit).*/                         green
/^(\+.*)/                                         green
/^(-.*)/                                          red

.. що чудово працює разом з alias git="acoc git"в .bash_profile.


Чи можете ви поділитися своїми налаштуваннями acoc?
Грег Дубіцький

Нвм, це було легко написати. :) Додано до відповіді.
Грег Дубіцький

1

Для кольорових git diffтрубопроводів lessце працює:

git -c color.diff=always diff [...] | less -R

0

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

Наприклад, "git status", наприклад, містить білий текст на фоні / чорний на білому тлі (розбірливий), темно-сірий для видаленого (нерозбірливий на чорному тлі, але розбірливий на білому тлі) та середній сірий для додавання (ячмінь розбірливий на чорному фон, нечіткий на білому тлі). Я перемикав фон мого вікна терміналу на / з білого / чорного, щоб я міг прочитати нерозбірливий текст. Просте рішення більше:

 git status | more

Це робить увесь текст розбірливим у стандартному вікні терміналу білого або чорного фону.


1
Ви також можете змінити конфігурацію, щоб встановити все без кольорів за замовчуванням ( color.ui = never).
Хлопець з капелюхом

0

або вимкнути всю / більшу частину забарвлення за допомогою:

git config --global color.ui false
git config --global color.branch false
git config --global color.diff false
git config --global color.interactive false
git config --global color.status false
git config --global color.grep false
git config --global color.pager false
git config --global color.decorate false
git config --global color.showbranch false

OP не дивився , щоб повернути від кольору, а в свою чергу на кольору. В ОП він зазначив, як це зробити, gitі хоче, щоб це було зробити в більш глобальному розумінні. Якщо ви знаєте про такий спосіб, будь ласка, відредагуйте свою відповідь, щоб пояснити це.
Циганський заклинатель

інколи люди шукають чогось тісно пов’язаного, але трохи іншого - але дякую за голос.
theRiley

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