Как раскрасить вывод git?

256

Есть ли способ вывода цвета для мерзавца (или любой команды)?

Рассмотреть возможность:

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 Seven

Ответы:

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

Я надеюсь, что это поможет вам начать. И, конечно же, вам нужен терминал, который поддерживает цвет.

Marco
источник
14
Я думаю, что, возможно, стоит поставить git config --global color.ui auto (ответ @Evgeny) на вершину вашей ... Я думаю, что именно это и ищет большинство людей. Я проголосовал за оба ... Я просто говорю, что ради Интернета, как он здесь появляется, я думаю, что многие люди просто хотят этот простой лайнер. Тем лучше, если они это получат, плюс ваше дополнительное совершенство.
MSA
Это отлично сработало для меня - в [color "status"]разделе я добавил branch = yellow.
Уэйн Вернер
3
Вы также можете добавить секцию [color] в файл .git / config проекта
andrej
И вы можете просто установить переменную конфигурации для одного вызова команды git: 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.

Евгений
источник
Можете ли вы объяснить разницу между color.ui true(который autoуказывает на) и always? Я читаю документы, но я все еще не понимаю разницу.
Чарви
19
git config --global color.ui auto
git config --global color.branch auto
git config --global color.status auto
sakisk
источник
К вашему сведению, только это работало для 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
Когда эта функция была добавлена?
Ондра Жижка
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
mlibre
источник
1

Вы можете сделать это с помощью Произвольное Command Output Colourer . В основном это работает, но я не выяснил, как обойти ошибку, когда подсказки, ожидающие ввода, не отображаются, и вы не можете просто набрать известный необходимый ввод и нажать клавишу ввода, чтобы продолжить в каждом случае.

Пример ~/.acoc.confдля git:

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

..which хорошо работает вместе с alias git="acoc git"ин .bash_profile.

Том Махони
источник
Можете ли вы поделиться своим конфигом для acoc?
Грег Дубицки
НВМ, это было легко написать. :) Добавлено в ответ.
Грег Дубицки
1

Для цветного git diffтрубопровода lessэто работает:

git -c color.diff=always diff [...] | less -R
JOX
источник
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
theRiley
источник
OP не смотрел , чтобы повернуть от цвета, а в свою очередь на цвета. В ОП он заявил, как это сделать, gitи хочет каким-то образом сделать это в более глобальном смысле. Если вам известен такой метод, пожалуйста, отредактируйте свой ответ, чтобы объяснить это.
Цыганка
иногда люди ищут что-то тесно связанное, но немного другое - но спасибо за отрицательное мнение.
theRiley
Мне понравилось @theRiley
Ричард Линдхаут