Git for-each-ref с цветной строкой формата

Я использую git for-each-ref как псевдоним git для отображения имени ветки и объекта последнего фиксации в этой ветке. Тем не менее, трудно определить, где заканчивается название ветки, и тема сообщения о фиксации, поэтому я пытаюсь разобрать название ветки, чтобы легче рассказать о различии между ними. Ниже приведен рабочий псевдоним без цвета:

[alias]
  logbranch = for-each-ref --sort=-committerdate refs/heads/ --format='%(refname:short) %(subject)'

Чтобы добавить цвет, я попытался использовать escape-последовательности оболочки (я использую bash) следующим образом:

[alias]
  logbranch = for-each-ref --sort=-committerdate refs/heads/ --format='[\033[0;31m]%(refname:short)[\e[m]   %(subject)'

который дает мне ошибку конфигурации git. Я также попытался заменить одиночные кавычки двойными кавычками и избежать квадратных скобок, но не кубиками.

Идеи?

Ответ 1

Я не вижу ничего на странице руководства for-each-ref, которая предполагает, что она поддерживает обратные слешковые последовательности, такие как \033. Если вы замените символ \033\e) буквенным символом escape, он, похоже, работает нормально.

Cupcake говорит, что for-each-ref также поддерживает %xx hex escape-последовательности, которые выглядят так:

[alias]
    logbranch = "for-each-ref --sort=-committerdate refs/heads/ --format='[%1B[0;31m]%(refname:short)[%1B[m]   %(subject)' "

Это также отлично работает в моей системе.

Ответ 2

Git 1.9/2.0 (Q1 2014) представит форматирование цвета для git for-each-ref.
См. commit fddb74c из Рамкумар Рамачандра (artagnon):

for-each-ref: введите %(color:...) для цвета

Усовершенствуйте 'git for-each-ref' с настройками форматирования цвета.
Теперь вы можете использовать следующий формат for-each-ref:

%(color:green)%(refname:short)%(color:reset)

где имена цветов описаны в color.branch.*.


С Git 2.15 (Q4 2017) вы сможете включить или отключить эти цвета.

См. commit 0c88bf5 (03 октября 2017 г.) Джефф Кинг (peff).
(слияние 04 октября 2017 г.)

предоставить параметр --color для всех пользователей фильтра ref-filter

Когда ref-фильтр узнал о want_color() в 11b087a(ref-filter: проконсультируйтесь с want_color() перед испусканием цветов, 2017-07-13), стало полезно уметь выключать цвета и для конкретных команд. Для git-branch вы можете сделать это с --color/--no-color.

Но для git-for-each-ref и git-tag, другие пользователи ref-filter, у вас нет опции, кроме как настроить настройку конфигурации "color.ui". Давайте дадим обеим командам обычные параметры командной строки цвета.

Это немного более очевидно как метод переопределения конфигурации. И он также подготавливает нас к изменению "always" (так что нам по-прежнему остается способ заставить цвет, когда наш вывод переходит к нетерминальному).