Настроить цвета для __git_ps1 с помощью GIT_PS1_SHOWCOLORHINTS

Что я пробовал

Я обновил мое приглашение, указав название ветки, используя __git_ps1. Кроме того, я установил GIT_PS1_SHOWCOLORHINTS.

Проблема

Приглашение появится правильно. Однако цвет ветки всегда зеленый. Я ожидал, что грязная ветка станет красной.

Состояние документов:

Цвета основаны на цветном выходе "git status -sb"

Я нашел и рассмотрел Как раскрасить git -status output? Но я не уверен, какие параметры мне нужно изменить...

Вопрос

Можно ли изменить цвет ветки на зеленый для чистой ветки и красный для грязной ветки? Если да, то как?

Ответ 1

Цвета, отображаемые __git_ps1 для грязных ветвей, не влияют на название ветки; они влияют на индикатор "грязного состояния". В дополнение к разрешающим цветам, если вы включите этот индикатор, вы увидите красную звездочку для грязной ветки:

old-prompt $ bash --noprofile --norc
bash-4.2$ source /etc/bash_completion.d/git-prompt
bash-4.2$ export GIT_PS1_SHOWCOLORHINTS=1
bash-4.2$ export GIT_PS1_SHOWDIRTYSTATE=1
bash-4.2$ export PROMPT_COMMAND='__git_ps1 "\[email protected]\h:\w" "\\\$ "'
[email protected]:~/path/to/dir (master *)$

Невозможно изменить цвет имени ветки на основе грязного состояния без изменения кода git-prompt.sh или предоставления вашей собственной функции.

Ответ 2

Я смог добиться достойного решения:
1. Клонирование последнего источника git для получения и установки последнего git-prompt.sh (у вашего дистрибутива может быть уже обновленный script)
2. Удаление проверки, которая останавливает script от вставки цветовых кодов в выходной строке.
3. Измените мой .bashrc, чтобы включить вызов __git_ps1 с некоторыми параметрами форматирования, чтобы изменить текст подсказки терминала.

Зафиксировать и документацию, включая определенные файлы и изменения, которые я сделал: https://github.com/karlapsite/git/commit/b34d9e8b690ec0b304eb794011938ab49be30204#diff-a43cc261eac6fbcc3578c94c2aa24713R449

Теперь моя консоль имеет всю необходимую информацию: я могу открыть терминал, а cd - в любое git repo:
$ cd ~/Github/git [email protected]:~/Github/git:(master)$ # 'master' is green

И когда я проверяю хэш и перехожу в состояние отдельной головы:
$ git checkout bca18110 [email protected]:~/Github/git:(bca1811...)$ # the commit hash is red

Мне нужно было следовать этому ответу: fooobar.com/info/150335/..., чтобы bash правильно интерпретировать цветовые коды после каждой команды, но мой терминал не поврежден, linewrapping все еще работает, и моя подсказка окрашена так, как я хотел!