Цвет в гит-логе - PullRequest
       18

Цвет в гит-логе

97 голосов
/ 05 мая 2011

Когда вы запускаете 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"

Ответы [ 5 ]

81 голосов
/ 30 мая 2013

Начиная с 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.)
57 голосов
/ 05 мая 2011

По умолчанию git log --decorate выставит:

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

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

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


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

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

Примечание: git 2.4+ (второй квартал 2015 года) лучше справится с настройкой цвета вокруг названий ветвей.
См. коммит 5ee8758 от Джунио С Хамано (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.

Если вы хотите закрасить заголовок и название локальной ветви в том же цвете, что и основной текст (возможно, из-за того, что голубой и зеленый цвета слишком слабы на черно-белом терминале, чтобы их можно было прочитать), вам не хотелось бы иметь сказать

[color "decorate"]
    head = black
    branch = black

потому что вы не сможете повторно использовать ту же конфигурацию на терминале белого на черном. Вы бы наивно ожидали

[color "decorate"]
    head = normal
branch = normal

на работу, но, к сожалению, это не так.
Строка «HEAD» и название ветви окрашиваются в тот же цвет, что и открывающая скобка или запятая между элементами оформления.
Это происходит потому, что код забывает сбросить цвет после печати «префикса» в своем собственном цвете.


Обратите внимание, что 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 + (3 квартал 2016 года) исправит еще одну ошибку и честь color=auto для %C(auto)


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

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

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

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

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

9 голосов
/ 05 мая 2011

Заключите их в скобки:

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

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

7 голосов
/ 23 марта 2012

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

git config --global log.decorate full

После этого вы можете использовать color.decorate.* для игры с цветами

1 голос
/ 07 января 2019

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

Пример: окраска имени автора в желтый цвет

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

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

  • черный
  • красный
  • зеленый
  • желтый
  • синий
  • пурпурный
  • голубой
  • белый
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...