Не раскрашивайте refs с помощью git log -pretty, когда задан не-цвет

Я работаю с Git, используя Windows 7, PowerShell и Posh- Git. У меня есть следующая настройка псевдонима:

ls = log --pretty=tformat:"%C(yellow)%h\\ %C(green)[%ad]%C(cyan)\\ <%cn>\\ %C(reset)%s%C(auto)%d"

Проблема заключалась в том, что когда я отправляю вывод в файл clip.exe, чтобы скопировать его в буфер обмена, он также копирует некоторые символы для цветов. Небольшое чтение, и я обнаружил, что вы можете добавить "авто", чтобы он использовал цвета по умолчанию, если указан параметр --no-color. Итак, теперь у меня есть:

ls = log --pretty=tformat:"%C(auto,yellow)%h\\ %C(auto,green)[%ad]%C(auto,cyan)\\ <%cn>\\ %C(auto,reset)%s%C(auto)%d"

Проблема, которую я сейчас имею, это последний бит вывода, показывающий ссылки. У меня есть цвет, установленный в auto, так что git будет применять цвета по умолчанию для ветвей и тегов, но не может понять, как заставить его соблюдать параметр --no-color. Если я установил его на% C (авто), цвета будут отображаться все время. Я пробовал% C (авто, авто) и работает с --no-color, но без него git жалуется:

error: invalid color value: auto
fatal: unable to parse --pretty format

Ответ 1

не может понять, как заставить его соблюдать параметр --no-color.
Если я установил его на %C(auto), цвета будут отображаться все время.

Это будет исправлено в git 2.9.x + (Q3 2016)

См. commit b15a3e0 (27 мая 2016 г.) Эдвард Томсон (ethomson).
(слияние Junio ​​C Hamano - gitster - в commit 1b3d14c, 20 июня 2016 г.

format_commit_message: честь color=auto для %C(auto)

git-log(1) документы, которые при указании формата %C(auto)заполнитель будет "включить автоматическую раскраску на следующем %placeholders, пока цвет не будет снова включен".

Однако, когда используется %C(auto), настоящая реализация будет цвета безоговорочно (даже если цветовая конфигурация отключена для текущего контекста - например, --no-color был указан или цвет auto, а выход не является tty).

Обновить format_commit_one, чтобы изучить текущий контекст, когда формат строка %C(auto), которая гарантирует, что мы не будем безоговорочно пишут цвета.
Это приводит к поведению в соответствии с поведением %C(auto,<colorname>) и позволяет пользователю указывать, что цвет должен отображаться только тогда, когда вывод является TTY.

Это то, что вы видите с помощью git -for-windows 2.9.0

no-color не работает

Но с более поздней версией версии 2.9.x + git --no-color работает:

no-color does work