Цвет в git -log

Когда вы запустите git log --decorate --pretty=oneline, на выходе будут записи типа (HEAD, refs/published/master, master) с цветом.

В моем gitconfig также есть следующее:

[color "branch"]
    current = yellow reverse
    local = yellow
    remote = green

Как вы копируете эти цвета при выполнении пользовательского формата, например:

git log --decorate --stat --graph --pretty=format:"%d %Cgreen%h%Creset (%ar - %Cred%an%Creset), %s%n"

Ответ 1

Как и в случае с git 1.8.3 (24 мая 2013 г.), вы можете использовать %C(auto) для украшения %d в строке формата git log.

Из примечаний к выпуску:

 * "git log --format" specifier learned %C(auto) token that tells Git
   to use color when interpolating %d (decoration), %h (short commit
   object name), etc. for terminal output.)

Ответ 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 заполнителями.

Ответ 3

Обозначьте их:

%C(...): color specification, as described in color.branch.* config option

Итак, %C(yellow reverse) будет работать.

Ответ 4

Вариант конфигурации log.decorate может включать/отключать декорации по умолчанию в журналах.

git config --global log.decorate full

Как только это будет сделано, вы можете использовать color.decorate.* для воспроизведения с цветами