Цвет в 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"

person NorthIsUp    schedule 04.05.2011    source источник


Ответы (5)


Начиная с 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.)
person Elad Shahar    schedule 30.05.2013

git log --decorate по умолчанию будет помещать:

  • ГОЛОВА в голубом
  • удаленные филиалы в красном
  • тег в зеленом

и может быть изменен через color.decorate config.

Но git log --format не предлагает способ конкретно отображать HEAD или пульты или ветвь: все три отображаются через %d, возможен один цвет.


Обновите май 2013 г., как указано ниже Elad Shahar (проголосовало за), 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 , который автоматически отключает цвета, когда вывод не используется для терминала1

%C(auto,blue)Hello%C(auto,reset)

Примечание. Git 2.4+ (второй квартал 2015 г.) лучше справляется с сбросом цвета вокруг имен веток.
См. совершить 5ee8758 от Junio ​​C Hamano (gitster):

log --decorate: не пропускайте цвет "фиксации" в следующий элемент

В "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» и имя ветки в тот же цвет, что и открывающая скобка или запятая между элементами декора.
Это потому, что код забывает сбросить цвет после печати «префикса» собственным цветом.


Обратите внимание, что в git 2.5 (второй квартал 2015 г.) исправлена ​​ошибка:

См. фиксацию 429ad20 от Junio ​​C Hamano (gitster), 13 мая 2015 г.
(объединено Junio ​​C Hamano - gitster - в фиксации fd70780, 22 мая. 2015)

log: не сокращайте названия украшений слишком рано

Улучшение "log --decorate" в Git 2.4, которое показывает фиксацию в конце текущей ветки, например. "HEAD -> master", не работал с --decorate = full.


Git 2.9.x + (3 квартал 2016 г.) исправит еще одну ошибку и выполнит color=auto для %C(auto)


Git 2.10.2 (октябрь 2016 г.) исправляет другие ошибки с помощью commit 82b83da (29 сентября 2016 г.) ) и совершить c99ad27 (17 сентября 2016 г.) с помощью Рене Шарфе (` `).
(Объединено с помощью Junio ​​C Hamano - gitster - в совершить 76796d4, 28 октября 2016 г.)

pretty: избегать добавления сброса для %C(auto), если вывод пустой

Мы запускаем escape-последовательность для сброса цвета и атрибута для %C(auto), чтобы убедиться, что автоматическая окраска отображается должным образом.
Прекратите делать это, если выходной strbuf пуст, то есть когда %C(auto) появляется в начале строка формата, потому что тогда нет необходимости в сбросе, и мы сохраняем несколько байтов на выходе.

pretty: разрешить %C(auto) сбросить все атрибуты

Сбросьте цвета и атрибуты при %C(auto), чтобы включить полный автоматический контроль над ними; в противном случае такие атрибуты, как полужирный или обратный, могут по-прежнему действовать от предыдущих %C заполнителей.

person VonC    schedule 05.05.2011
comment
нет возможности использовать --decorate и --pretty = ... - person NorthIsUp; 05.05.2011
comment
@NorthlsUp: --decorate, похоже, имеет свою собственную реализацию и конфигурацию, в то время как --pretty предлагает ту же информацию через %d как один блок, что означает, что вы не можете иметь такой же мелкозернистый уровень цветовой конфигурации с --pretty, чем с --decorate. - person VonC; 05.05.2011
comment
Единственная разница, которую я вижу, когда добавляю --decorate после git log, - это репозитории, начинающиеся с refs / Heads / ... или refs / remotes .... Цвета отображаются в любом случае. Есть идеи, что могло бы вызвать это? Причина, по которой я спрашиваю, заключается в том, что мой .gitconfig не показывает никаких свойств цвета. Мне интересно, где я могу найти свою собственность color.decorate. Я не вижу этого в моем файле .gitconfig. - person J Woodchuck; 26.04.2018
comment
@JWoodchuck Попробуйте git config --show-origin -l: вы увидите все свои конфиги. Затем вы можете найти цвет с помощью grep. - person VonC; 26.04.2018
comment
Ага, когда я набираю цвет, ничего не отображается, поэтому настройки выглядят так загадочно. - person J Woodchuck; 26.04.2018
comment
@JWoodchuck Это может быть потому, что для color.ui установлено значение true или auto, начиная с Git 1.8.4: git-scm.com/docs/git-config#git-config-colorui - person VonC; 26.04.2018
comment
Звучит правдоподобно, учитывая, что это, по-видимому, давным-давно, а я использую 2.16.2. Спасибо! - person J Woodchuck; 26.04.2018

Поместите их в скобки:

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

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

person Josh Lee    schedule 04.05.2011
comment
не совсем так, %d - это все ветви, поэтому он может выглядеть как (HEAD, master), в этом случае голова должна быть синей, а мастер - зеленым (я считаю, что это цвета по умолчанию). где %C(yellow)%d%Creset сделал бы это все одного цвета. - person NorthIsUp; 05.05.2011
comment
О, раскраска отдельных украшений. Я думаю, что это невозможно. Код для отображения записей журнала, по сути, реализован дважды. - person Josh Lee; 05.05.2011
comment
Жаль, что это невозможно ... Я бы хотел сделать git log --decorate --oneline --date=... - person mgalgs; 04.03.2012

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

git config --global log.decorate full

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

person Henrik Gustafsson    schedule 23.03.2012
comment
log.decorate=full заставляет печатать имена ссылок с их префиксами (refs/heads/ и т. Д.); Я считаю log.decorate=short более полезным. - person musiphil; 14.02.2014
comment
Очень полезная настройка, хотя я предпочитаю short, а не full - person Thomas Levesque; 17.02.2015

Некоторые могут захотеть использовать это: %C(colorname) Это не требует изменения цветовой конфигурации.

Пример: выделение имени автора желтым цветом

--pretty=format:"%C(yellow)%an%Creset"

Обычные цвета ANSI должны работать https://en.wikipedia.org/wiki/ANSI_escape_code

  • чернить
  • красный
  • зеленый
  • желтый
  • синий
  • пурпурный
  • голубой
  • белый
person NullPointerWizard    schedule 07.01.2019