Колір у git-log


106

При запуску 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"

Відповіді:


91

Станом на 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.)

60

За git log --decorateзамовчуванням буде поставлено:

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

і може бути змінено через color.decorateconfig.

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


Оновлення травня 2013 як зазначено нижче по Elad Шахар (upvoted), мерзотник 1.8.3 пропонує більше один варіант:

git log –formatтепер спортивний %C(auto)маркер, який вказує Git використовувати колір для вирішення %d(прикраса), %h(коротке ім'я об'єкта фіксації) тощо для виводу терміналу.

У цій публікації в блозі Atlassian зазначається, що ця функція є частиною кількох інших, орієнтованих на формат ( git rebase, git count-objects) та кольори ( git branch -vv)

Це додається до попереднього auto,reset1.8.2 , який автоматично відключає кольори, коли вихід не використовується для терміналу1

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

Примітка: git 2.4+ (Q2 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 (Q2 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 + (Q3 2016) буде виправити іншу помилку і честь color=autoдля%C(auto)


Git 2.10.2 (жовтень 2016) виправляє інші помилки з командою 82b83da (29 вересня 2016) та виконувати c99ad27 (17 вересня 2016) від René Scharfe (``) .
(Об’єднано Хуніо С Хамано - gitster- у комітеті 76796d4 , 28 жовтня 2016 р.)

pretty: уникайте додавання скидання, %C(auto)якщо вихід пустий

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

pretty: нехай %C(auto)скидає всі атрибути

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


3
чи немає способу використовувати --decorate та --pretty = "... речі"?
NorthIsUp

8
@NorthlsUp: --decorateсхоже, має власну реалізацію та конфігурацію, хоча --prettyпропонує ту ж інформацію через %dодин блок, що означає, що ви не можете мати той самий тонкозернистий рівень конфігурації кольорів, --prettyяк у вас --decorate.
VonC

Єдина відмінність, яку я бачу, коли після "git log" додаю "--decorate", це репост починати з "refs / heads / ..." або "refs / Remotes ...". Кольори відображаються в будь-якому випадку. Будь-яка ідея, що це спричинило б? Причина, про яку я запитую - мій .gitconfig не проявляє жодних властивостей кольору. Мені цікаво, де я можу знайти своє "color.decorate" властивість. Я не бачу його у моєму файлі .gitconfig.
J Woodchuck

@JWoodchuck Спробуйте git config --show-origin -l: ви побачите всі свої конфігурації. Потім ви можете похвалитися за "колір".
VonC

Так, нічого не з’являється, коли я вітаюсь за кольором, що робить, де налаштування відображаються настільки загадковими.
J Woodchuck

9

Параметри їх:

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

Так %C(yellow reverse)би працювало.


1
не зовсім, %dчи всі гілки, щоб це могло виглядати (HEAD, master), в цьому випадку голова повинна бути синьою, а майстер - зеленою (я вважаю, що це кольори за замовчуванням). де %C(yellow)%d%Cresetзробити це все одним кольором
NorthIsUp

2
О, розфарбовування окремих прикрас. Я думаю, що це неможливо. Код для відображення записів журналу по суті реалізується двічі.
Джош Лі

1
Шкода, що це неможливо ... Я б хотів це зробитиgit log --decorate --oneline --date=...
mgalgs

8

Параметр config log.decorateможе включати / вимикати декори за замовчуванням у журналах.

git config --global log.decorate full

Після цього ви можете color.decorate.*грати з квітами


3
log.decorate=fullпризводить до того, що назви посилань друкуються з їх префіксами ( refs/heads/тощо); Я вважаю log.decorate=shortкориснішим.
musiphil

1
Дуже корисна настройка, хоча я теж віддаю перевагу, shortа неfull
Томас Левеск

4

Деякі можуть скористатися цим: для %C(colorname) цього не потрібно змінювати конфігурацію кольору.

Приклад: забарвлення імені автора в жовтий колір

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

Регулярні кольори ANSI повинні працювати https://en.wikipedia.org/wiki/ANSI_escape_code

  • чорний
  • червоний
  • зелений
  • жовтий
  • синій
  • пурпуровий
  • синій
  • білі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.