Как мне показать ветку git с цветами в приглашении Bash?

110

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

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes 

...

# Add git branch if its present to 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 У меня также есть это (по умолчанию):

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes

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

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

http://pastebin.com/M8kjEiH3

U123
источник
Был force_color_promptранее оставлен комментарий?
Муру
Да, я пробовал как с комментариями, так и без комментариев. Указанное выше руководство говорит, что его следует закомментировать.
u123
Можете ли вы опубликовать свой полный .bashrc? IIRC по умолчанию .bashrcне включает цветовые приглашения, поэтому вы должны изменить его, чтобы показать цвета. Это зависит от того, что вы изменили.
Муру
1
Посмотрите на строку 64, которая должна сказать вам, почему force_color_promptне помогло раскомментирование .
Муру
2
@ u123 не слишком переживай по умолчанию .bashrc. Если вы испортите, вы всегда можете получить оригинал /etc/skel/.bashrc.
Муру

Ответы:

125

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

# Add git branch if its present to 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(строка № 64).

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


Так что часть вашего .bashrc может выглядеть так

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
# THE SIX LINES BELOW are the default prompt and the unset (which were in the original .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

screensot

кос
источник
Проверено выше и вы правы. Я буду придерживаться новой версии сниппета, так как он работает без изменения стандартных частей файла bashrc.
u123
1
не удается добавить цвет к названию ветви.
Авинаш Радж
@AvinashRaj Протестируйте с копией по умолчанию ~/.bashrcв /etc/skel/.bashrc, вы могли бы что - то вмешиваться в вашей ~/.bashrc.
Кос
un-comment force_color_prompt = yes (строка # 48), если цвета не видны.
Адиль Аббаси
1
Чтобы раскрасить ветку в соответствии с ее статусом, вы можете использовать собственный скрипт git-prompt, предоставляемый самим git.
Никет Патхак
61

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

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

# Show git branch name
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
Сэм
источник
5
Это сработало для меня 18.04!
cbloss793
1
Благодарю. Использование: Ubuntu 18.04.1 LTS
Бишвас Мишра
Это сработало и у меня на элементарной OS 0.4 Loki. Просто откройте мой ~ / .bashrc с помощью команды sudo nano ~/.bashrc, скопируйте код в конец файла, сохраните его, выйдите и перезагрузите ~ / .bashrc с кодом, который вы вставили выше. Большое спасибо;)
Хуан Гомес Каррильо
Работает на Redhat 6.8!
BeeGee
1
Это работало и сохраняло цвета! (Ubuntu 18.04)
warkentien2
10

На данный момент я следил за этим 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 # Show git branch name at command prompt
export GIT_PS1_SHOWCOLORHINTS=true # Option for git-prompt.sh to show branch name in color

# Terminal Prompt:
# Include git branch, use PROMPT_COMMAND (not PS1) to get color output (see git-prompt.sh for more)
export PROMPT_COMMAND='__git_ps1 "\w" "\n\\\$ "' # Git branch (relies on git-prompt.sh)

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

typelogic
источник
легко и работает!
Дани
Это должен быть принятый ответ, поскольку он ясен, лаконичен и выполняет свою работу, а также работает на других платформах.
Мигельморин
2

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

нажмите 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\] $ "

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

webtechnelson
источник
Здравствуйте, я попробовал, и он работает только там, где я переключаю суперпользователя, вы можете сказать мне, как включить всегда?
Денис Стефанов
0

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

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

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

джокер
источник
0

замещать

parse_git_branch

с участием

parse_git_branch 2>/dev/null

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

андрей
источник
0

Добавьте строки ниже к ~/.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\]\$ '
Нарделе Саломон
источник