Ответ 2
По умолчанию git log --decorate
поместится:
- HEAD в голубом
- удаленные ветки в красном
- тег в зеленом
и может быть изменен с помощью color.decorate
.
Но git log --format
не предлагает способ отображения специально HEAD
или пультов или ветвей: отображаются все три через %d
, с одним возможным цветом.
Обновление в мае 2013 года, как упомянутое ниже Элад Шахар (upvoted), git 1.8. 3 предлагает еще один вариант:
git log –format
теперь имеет токен %C(auto)
, который сообщает git использовать цвет при разрешении %d
(украшение), %h
(короткое имя объекта фиксации) и т.д. для вывода терминала.
Этот сообщение в блоге Atlassian комментирует, что эта функция является частью нескольких других, ориентированных на формат (git rebase
, git count-objects
) и цвета (git branch -vv
)
В дополнение к предыдущему auto,reset
из 1.8.2, который автоматически отключает цвета, когда вывод не используется для terminal1
%C(auto,blue)Hello%C(auto,reset)
Примечание: git 2.4+ (Q2 2015) улучшит работу по сбросу цвета по именам веток.
См. commit 5ee8758 Junio C Hamano (gitster
):
log --decorate
: не пропускайте цвет "commit" в следующий элемент
В "git log --decorate
" вы увидите заголовок фиксации следующим образом:
commit ... (HEAD, jc/decorate-leaky-separator-color)
где "commit ... (
" написано в color.diff.commit
, "HEAD
" в color.decorate.head
, ",
" в color.diff.commit
, имя ветки в color.decorate.branch
и затем закрыть ")
" в color.diff.commit
.
Если вы хотите нарисовать имя HEAD и локального ветки в том же цвете, что и основной текст (возможно, потому, что голубой и зеленый слишком слабый на черно-белом терминале для чтения), вы не захотите сказать
[color "decorate"]
head = black
branch = black
потому что вы не сможете повторно использовать ту же конфигурацию на терминале "белый на черном". Вы бы наивно ожидали
[color "decorate"]
head = normal
branch = normal
работать, но, к сожалению, это не так. Он рисует строку "HEAD
" и имя ветки того же цвета, что и открывающая скобка или запятая между элементами оформления.
Это связано с тем, что код забывает reset цвет после печати "префикса" в своем собственном цвете.
Обратите внимание, что git 2.5 (Q2 2015) исправляет ошибку:
См. выполнить 429ad20 Junio C Hamano (gitster
), 13 мая 2015 года.
(объединено Junio C Hamano - gitster
- в commit fd70780, 22 мая 2015 г.)
log
: не слишком рано сокращать названия украшений
Расширение <log --decorate
"в git 2.4, которое показывает фиксацию на вершине текущей ветки, например." HEAD -> master
", не работал с --decorate = full.
Git 2.9.x + (Q3 2016) исправит еще одну ошибку и честь color=auto
для %C(auto)
Git 2.10.2 (октябрь 2016) исправляет другие ошибки с помощью commit 82b83da (29 сентября 2016 г.) и совершить c99ad27 (17 сентября 2016 г.) René Scharfe (` `).
(объединено Junio C Hamano - gitster
- в commit 76796d4, 28 октября 2016 г.
pretty
: не добавляйте reset для %C(auto)
, если вывод пуст
Мы испускаем escape-последовательность для сброса цвета и атрибута для %C(auto)
, чтобы убедиться, что автоматическая раскраска отображается по назначению.
Прекратите делать это, если выходной strbuf пуст, т.е. когда %C(auto)
появляется в начале строки формата, потому что тогда нет необходимости в reset, и мы сохраняем несколько байтов в выход.
pretty
: пусть %C(auto)
reset все атрибуты
Reset цвета и атрибуты на %C(auto)
, чтобы включить полную автоматическую контроль над ними; В противном случае атрибуты, такие как жирный или наоборот, могут все еще действуют по сравнению с предыдущими %C
заполнителями.