Як я показую гітку git кольорами у запиті Bash?


107

Я використовую це керівництво, щоб показати ім'я гілки в терміналі 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

У результаті я отримую:

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

так це працює . Але чому було видалено забарвлення мого користувача @ 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.
муру

Відповіді:


120

Цей фрагмент:

# 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

скріншот


Перевірте вище, і ви маєте рацію. Я буду дотримуватися нової версії фрагмента, оскільки вона працює без необхідності змінювати типові частини файлу bashrc.
u123

1
він не може додати колір до назви гілки.
Avinash Raj

@AvinashRaj Перевірте його з копією за замовчуванням ~/.bashrcу /etc/skel/.bashrc, можливо, у вас щось заважає ~/.bashrc.
kos

un-comment force_color_prompt = так (рядок № 48), якщо кольори не видно.
Аділ Аббасі

1
Щоб пофарбувати свою гілку відповідно до її статусу, ви можете використовувати вроджений скрипт git-prompt, наданий самим git.
Нікет Патхак

60

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
Bishwas Mishra

Він працював і для елементарного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 repo, ваш запит Bash повинен тепер показувати поточну гілку git у кольорі, що означає, якщо її зміни не відбулися.


легкий і робочий!
Дани

Це має бути прийнятою відповіддю, оскільки це зрозуміло, стисло і виконує роботу, і це працює і на інших платформах.
miguelmorin

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.