Як я показую гітку 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.