Как мне показать ветку 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


Был 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 в цвете, обозначающая, если она получила незафиксированные изменения.


легко и работает!
— Дани

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

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\] $ "

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


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

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\]\$ '

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.