Как раскрасить git ошибки, предупреждения и фатальные сообщения?

При устранении неполадок git проблем пользователей я постоянно сталкиваюсь с тем, что люди не замечают сообщения об ошибках/предупреждения из git, а затем сжигают пальцы. Есть ли способ раскрасить ошибки и предупреждения git выходы?

Ответы

Ответ 1

С Git 2.18 (Q2 2018) у вас теперь есть лучшая документация настроек для раскрашивания ошибок/подсказок.

См. Коммит 79f62e7 (21 апреля 2018 г.) Йоханнеса dscho (dscho).
(Объединено Йоханнесом dscho - dscho - в коммите 79f62e7, 24 апреля 2018 г.)

push: ошибки раскраски

Это попытка решить проблему, с которой я сталкиваюсь с людьми, которые являются новичками в Git, особенно с коллегами по команде, когда им не хватает того, что их отправка в удаленное местоположение не удалась, потому что неудача и успех оба возвращают блок белого текста.,

Например, если я отправляю что-то в удаленный репозиторий, а затем коллега пытается переместить его в тот же удаленный репозиторий, и при этом происходит сбой, потому что он требует, чтобы они сначала извлекли, но они не замечают, потому что оба успеха и неудачи возвращают блок белого текста. Затем они продолжают свое дело, думая, что оно было успешно продвинуто.

Этот патч окрашивает ошибки и подсказки (красным и желтым соответственно), поэтому всякий раз, когда происходит сбой при удалении в удаленный репозиторий, это становится более заметным.


С Git 2.19 (Q3 2018), код боковой полосы научился по желанию рисовать выбранные ключевые слова в начале входящих строк на приемном конце.

См. Коммит bf1a11f (07 августа 2018 г.) Хан-Вена Нинхуйса (hanwen).
artagnon: Джонатан Нидер (artagnon).
(Объединено с Junio C Hamano - gitster - в коммите d280170, 20 августа 2018 г.)

sideband: выделение ключевых слов в удаленном выводе боковой полосы

Раскраска контролируется настройкой конфигурации " color.remote ".

Поддерживаемые ключевые слова: " error ", " warning ", " hint " и " success ".
Они подсвечиваются, если они появляются в начале строки, что часто встречается в сообщениях об ошибках, например.

ERROR: commit is missing Change-Id

Сам процесс Git push печатает множество неактивных сообщений (например, статистика полосы пропускания, счетчики объектов для разных фаз процесса).
Это скрывает действенные сообщения об ошибках, которые серверы могут отправлять обратно.
Выделение ключевых слов в боковой полосе привлекает больше внимания к этим сообщениям.

Основанием для этого изменения является то, что Gerrit выполняет обработку на стороне сервера для создания или обновления обзоров кода, и во время отправки пользователю необходимо сообщать сообщения об ошибках (например, отсутствует Change-Id).
Исследование пользователей показало, что у новых пользователей проблемы с просмотром этих сообщений.

Выделение выполняется на стороне клиента, а не на стороне сервера, поэтому серверам не нужно расширять возможности для понимания кодов выхода терминала и состояния терминала.
Это также согласуется с текущим состоянием, в котором Git управляет локальным дисплеем (например, префикс сообщения перед " remote: ").

Подсветка может быть настроена с помощью параметров конфигурации color.remote.<KEYWORD>.
Поскольку ключи сопоставляются без учета регистра, мы также сопоставляем регистры без учета регистра.

Наконец, это решение обратно совместимо: многие серверы уже ставят свои сообщения в префикс "ошибка", и они получат выгоду от этого изменения, не требуя обновления сервера.
В отличие от этого, решение на стороне сервера, вероятно, потребует TERM переменной TERM через протокол git, поэтому оно потребует изменений как сервера, так и клиента.


Примечание. Используйте Git 2.21 (Q1 2019). Строки, начинающиеся с определенного ключевого слова, которые идут по проводам, а также строки, состоящие только из одного из этих ключевых слов, должны быть окрашены в цвет для облегчения взгляда, но последнее было сломан с тех пор, как функция была введена в 2.19, которая была исправлена.

См. Коммит 1f67290 (3 декабря 2018 г.) Стефана Беллера (stefanbeller).
(Объединено Junio C Hamano - gitster - в коммите 20b3bc1, 14 января 2019 г.)

sideband: цветные линии только с ключевым словом

Когда был представлен bf1a11f (sideband: выделение ключевых слов в выводе удаленной боковой полосы, 2018-08-07), было тщательно продумано, какие строки будут выделены.
Однако 59a255a (sideband: не считывать после конца ввода, 2018-08-18) привел к регрессии, которую оригинал не проверял.
Строка, содержащая только ключевое слово и ничего больше (" SUCCESS "), должна быть цветной.

Ответ 2

Поскольку я не нашел подходящего способа раскрасить сообщения об ошибках, я решил добавить дополнительное предупреждение, когда git возвращает код ошибки (! = 0).

Чтобы сделать это, добавьте это в ваш ~/.bashrc или ~/.bash_profile

# Wrap git. On errors, print an additional line in red.
git(){
    command git "[email protected]"
    local exitCode=$?
    if [ $exitCode -ne 0 ]; then
        printf "\033[0;31mERROR: git exited with code $exitCode\033[0m\n"
        return $exitCode
    fi
}

Вот результат: enter image description here

Обратите внимание, что окрашивание stderr в красный не очень хорошо работает, потому что git регистрирует в stderr много вещей, а не только ошибки. И некоторые ошибки выводятся в стандартный вывод.

Ответ 3

Для этого не существует git buit-in. git просто печатает ошибки в STDERR и не заботится о летальности ошибки или чего-то еще. То, что вы можете сделать, это цвет STDERR красный. Как это сделать, было задано на ServerFault: https://serverfault.com/questions/59262/bash-print-stderr-in-red-color

Существует три основных варианта:

  • Выполните команду следующим образом:

    *git-command* 2> >(while read line; do echo -e "\e[01;31m$line\e[0m" >&2; done)
    
  • Используйте обертку script (см. ServeFault для них) и запускайте команды типа

    mywrapper *git-command*
    
  • Установите stderred. Это позволит вам сделать эффект постоянным, не изменяя вашу командную строку. Не уверен, что это будет работать на Windows.