Как мне показать ветку git с цветами в Bash-подсказке?

Вопрос или проблема

Я использую это руководство, чтобы показать имя ветки в терминале gnome (Ubuntu 15.10) при работе в репозитории git. На основе вышеизложенного у меня теперь есть следующее в моем файле ~/.bashrc:

# раскомментировать для цветного приглашения, если терминал поддерживает эту возможность; выключено
# по умолчанию, чтобы не отвлекать пользователя: внимание в окне терминала
# должно быть на выводе команд, а не на приглашении
#force_color_prompt=yes 

# Добавить ветку git, если она присутствует в PS1
parse_git_branch() {
 git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
if [ "$color_prompt" = yes ]; then
 PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\$ '
else
 PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(parse_git_branch)\$ '
fi
unset color_prompt force_color_prompt

В результате я теперь получаю:

введите описание изображения здесь

значит, это работает. Но почему цвет моего user@host был убран? И я также ожидал, что имя ветки должно быть цветным. Раньше это выглядело так:

введите описание изображения здесь

ОБНОВЛЕНИЕ:
Я теперь попробовал это руководство вместо этого:

https://coderwall.com/p/fasnya/add-git-branch-name-to-bash-prompt

добавив это в .bashrc:

parse_git_branch() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\] $ "

и это работает:

введите описание изображения здесь

Обратите внимание, что в .bashrc у меня также есть это (по умолчанию):

# раскомментировать для цветного приглашения, если терминал поддерживает эту возможность; выключено
# по умолчанию, чтобы не отвлекать пользователя: внимание в окне терминала
# должно быть на выводе команд, а не на приглашении
#force_color_prompt=yes

Мне еще предстоит узнать причину, почему этот фрагмент дает правильный результат, а другая версия — нет. Есть какие-то мысли по этому поводу?

Вот версия моего .bashrc, в которой включен старый фрагмент, который не работает:

http://pastebin.com/M8kjEiH3

Этот фрагмент:

# Добавить ветку git, если она присутствует в PS1

parse_git_branch() {
 git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
if [ "$color_prompt" = yes ]; then
 PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\$ '
else
 PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(parse_git_branch)\$ '
fi

должен заменить определение по умолчанию:

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

за которым следует:

unset color_prompt force_color_prompt

но .bashrc, который вы опубликовали, показывает что вы добавляете его после определения по умолчанию и после unset color_prompt force_color_prompt.

Либо замените определение по умолчанию на этот фрагмент, либо оставьте ваш ~/.bashrc таким, как он есть сейчас, и закомментируйте как определение по умолчанию, так и unset color_prompt force_color_prompt.


Если вы оставите ваш ~/.bashrc таким, как он есть сейчас, и закомментируете как определение по умолчанию, так и unset color_prompt force_color_prompt, ваш ~/.bashrc будет выглядеть примерно так:

#if [ "$color_prompt" = yes ]; then
#    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
#else
#    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
#fi
#unset color_prompt force_color_prompt

# Добавить ветку git, если она присутствует в PS1

parse_git_branch() {
 git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
if [ "$color_prompt" = yes ]; then
 PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\$ '
else
 PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(parse_git_branch)\$ '
fi

скриншот

Ubuntu: Показать имя вашей ветки в терминале

Добавьте эти строки в ваш файл ~/.bashrc

# Показать имя ветки git
force_color_prompt=yes
color_prompt=yes
parse_git_branch() {
 git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
if [ "$color_prompt" = yes ]; then
 PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\$ '
else
 PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(parse_git_branch)\$ '
fi
unset color_prompt force_color_prompt

Обновите файл .bashrc с помощью этой команды:

$ source ~/.bashrc

На данный момент я следовал этому
https://gist.github.com/eliotsykes/47516b877f5a4f7cd52f и всё работает,
мне это нравится, хотя я планирую настроить его дальше.

В терминале

mkdir ~/.bash

Скопируйте сырой файл git-prompt.sh из git contrib в каталог ~/.bash:
https://github.com/git/git/blob/master/contrib/completion/git-prompt.sh

Внутри ~/.bashrc или ~/.bash_profile (выберите файл, в который вы
обычно помещаете любые настройки/настройку bash), добавьте строки:

source ~/.bash/git-prompt.sh # Показать имя ветки git в приглашении команд
export GIT_PS1_SHOWCOLORHINTS=true # Опция для git-prompt.sh для отображения имени ветки в цвете

# Терминальное приглашение:
# Включить ветку git, используйте PROMPT_COMMAND (не PS1), чтобы получить цветной вывод (см. git-prompt.sh для получения дополнительной информации)
export PROMPT_COMMAND='__git_ps1 "\w" "\n\\\$ "' # Ветка git (зависит от git-prompt.sh)

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

Быстрый хак:

  1. Добавьте это в ~/.bashrc:
parse_git_branch() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}

export PS1="\u@\h \[\e[32m\]\w \[\e[91m\]\$(parse_git_branch)\[\e[00m\]$ "
  1. Перезапустите терминал или выполните source ~/.bashrc:

введите описание изображения здесь

Более подробная информация:
https://medium.com/@thucnc/how-to-show-current-git-branch-with-colors-in-bash-prompt-380d05a24745

Добавьте следующие строки в ~/.bashrc:

export GIT_PS1_SHOWDIRTYSTATE=true
export GIT_PS1_SHOWUNTRACKEDFILES=true

export PS1='\[\033[32m\]\u@\h\[\033[00m\]:\[\033[34m\]\w\[\033[31m\]$(__git_ps1)\[\033[00m\]\$ '

Перейдите в домашнюю папку

нажмите Ctrl+h, чтобы показать скрытые файлы.

Откройте файл .bashrc и в конце вставьте следующее:

parse_git_branch() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\] $ "

Если у вас открыт терминал, закройте его и откройте снова. Наслаждайтесь!!

Почему беспокоиться об использовании sed? как в …

git branch 2> /dev/null | sed -e ‘/^[^]/d’ -e ‘s/ (.*)/(\1)/’

Гораздо проще просто использовать:

git branch –show-current

Это выводит текущую ветку и никаких лишних символов!

Я использую bash-git-prompt. Это настраиваемо и проще, чем писать свое собственное, что, как я предполагаю, ищут многие читатели.

Мой вариант для KUbuntu 20.04 LTS, основанный на исходном значении PS1:

# вставить в ~/.bashrc
parse_git_branch() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\] $ "

Тема старая, но я опубликую, чтобы помочь кому-то.
В файле .bashrc, находящемся в локальной папке пользователя, замените существующий PS1 на этот:

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\[\033[1;36m\]$(__git_ps1 " (%s)")\[\033[01;34m\]$\[\033[00m\]'

Если вы хотите изменить цвет ветки, измените цвет перед параметром $ (__ git_ps1 “(% s)”) т.е. измените это значение:

 \[\033[1;36m\]

цветовая схема
https://gist.github.com/avelino/3188137

Моя проблема заключалась в том, что я не включил опцию

Запускать команду как оболочку входа в

ТерминалПравкаНастройки профиляКоманда

замените

parse_git_branch

на

parse_git_branch 2>/dev/null

в вашем определении PS1 и живите долго и счастливо.

sudo vi .bashrc

Напишите ниже код в конце файла:

git_branch() {
 git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
export PS1="\[\033[1;36m\]\u\[\033[1;31m\]@\[\033[1;32m\]\h:\[\033[1;35m\]\w\[\033[1;31m\]\$\[\033[0m\]\$(git_branch)\$ "
source .bashrc

Лучшее и краткое решение.
Измените файл .bashrc, находящийся в ~/ директории.
Измените переменную PS1. В моем случае это 60-я строка.
Выдержки из файла .bashrc с измененной переменной PS1:

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;36m\]`__git_ps1`\[\033[00m\]\n\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi

Я добавил __git_ps1 переменную и \n для новой строки для лучшей
читаемости.
Работает в Ubuntu 22.04 LTS и 20.04.4 LTS с установленным git.
Пример:
пример терминала

Используйте bash-git-prompt

Проверьте этот git репозиторий https://github.com/magicmonty/bash-git-prompt

В моем случае я не перезаписывал переменную PS1, потому что мне нужно было сохранить добавленное окружение, которое добавляется пакетом anaconda, то есть (base) на изображении ниже. Я использую Ubuntu 20.04, и все, что я хотел, это добавить ветку в конце, благодаря @thucnguyen, так как мое решение основано на его:

скриншот терминала

parse_git_branch() {
  git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1) /'
}
export PS1="$PS1\[\e[91m\]\$(parse_git_branch)\[\e[00m\]"

Ответ или решение

Чтобы отобразить название ветки Git с цветами в командной строке Bash на Ubuntu в терминале GNOME, вам необходимо внести изменения в файл конфигурации ~/.bashrc. Я подробно расскажу, как это сделать, а также объясню, почему некоторые изменения могут не срабатывать должным образом.

Шаги для настройки цветного отображения ветки Git

  1. Открытие файла .bashrc:
    Выполните в терминале следующую команду, чтобы открыть файл конфигурации:

    nano ~/.bashrc
  2. Добавление функции parse_git_branch:
    Вставьте следующую функцию в конец файла. Эта функция будет извлекать имя текущей ветки Git.

    parse_git_branch() {
       git branch 2>/dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
    }
  3. Настройка переменной PS1:
    Теперь необходимо изменить переменную PS1, которая определяет формат командной строки. В одном из этих фрагментов необходимо заменить PS1 вашей конфигурацией. Приведу пример настройки:

    if [ "$color_prompt" = yes ]; then
       PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\$ '
    else
       PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(parse_git_branch)\$ '
    fi
  4. Включение цветного подсветки:
    Убедитесь, что переменные color_prompt и force_color_prompt выставлены в yes, чтобы включить цветное отображение:

    force_color_prompt=yes
    color_prompt=yes
  5. Сохранение изменений:
    Сохраните изменения в редакторе (в nano нажмите CTRL+O, затем ENTER, и CTRL+X для выхода).

  6. Применение изменений:
    Чтобы изменения вступили в силу, выполните следующую команду:

    source ~/.bashrc

О возможных проблемах

Если вы заметили, что цвета в вашем выводе исчезли или не отображаются, это может быть связано с тем, как вы определили переменную PS1. Некоторые версии конфигурации .bashrc могут необязательно включать обработку цветового кода для определенных элементов. Важно, чтобы все элементы в строке PS1, которые вы хотите выделить цветом, были заключены в соответствующие escape-последовательности \[\033[XXm\] и завершающий \[\033[00m\] для сброса цвета.

Обратите внимание, в вашем первоначальном фрагменте могла быть строка unset color_prompt force_color_prompt, которая отключала цветовую подсветку после того, как вы её включили. Убедитесь, что эта строка закомментирована или удалена, чтобы изменения применились правильно.

Рекомендации

  • Использование __git_ps1: Если вы ищете более изящное решение, рассмотрите использование встроенной функции __git_ps1, которая входит в пакет Git. Это может упростить получение текущей ветки.
  • Поддержка инструментов: Для более сложных настроек рассмотрите использование bash-git-prompt, который обеспечивает высокую степень кастомизации и поддержку различных функций.

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

Теперь, следуя вышеупомянутым шагам и рекомендациям, вы сможете настроить ваш Bash TMUX для более эффективной работы.

Оцените материал
Добавить комментарий

Капча загружается...