如何在Bash提示中用颜色显示git分支?


107

在git存储库中工作时,我正在使用本指南在gnome终端(Ubuntu 15.10)中显示分支名称。基于以上内容,我现在在〜/ .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 '16

您可以张贴完整的.bashrc吗?IIRC的默认设置.bashrc不启用颜色提示,因此您必须将其更改为显示颜色。这取决于您所做的更改。
大师

1
看看第64行,它应该告诉您为什么取消注释force_color_prompt没有帮助。
muru

2
@ u123不必担心默认值.bashrc太多。如果您搞砸了,总是可以从获得原始文档/etc/skel/.bashrc
大师

Answers:


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 2016年

1
它无法为分支名称添加颜色。
阿维纳什·拉吉

@AvinashRaj使用默认的拷贝测试中它~/.bashrc/etc/skel/.bashrc,你可能有一些在你的干扰~/.bashrc
kos 2016年

如果颜色不可见,请取消注释force_color_prompt = yes(第48行)。
Adil Abbasi

1
要根据分支的状态为分支着色,可以使用git本身提供的本地git-prompt脚本
Niket Pathak,

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

它在elementaryOS 0.4 Loki上也对我有用。只需使用命令打开〜/ .bashrc sudo nano ~/.bashrc,将代码复制到文件末尾,然后保存,退出并使用上面粘贴的代码重新加载〜/ .bashrc即可。非常感谢;)
JuanGómezCarrillo

适用于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分支,表示它的未提交更改。


简单又工作!
达尼(Dani)

这应该是公认的答案,因为它清晰,简洁并且可以完成工作,并且也可以在其他平台上使用。
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\] $ "

如果您打开了终端,请关闭并再次打开。请享用!!


您好,我尝试过,它仅在切换超级用户的地方有效,您能告诉我如何始终启用吗?
丹尼斯·斯蒂芬诺夫'18

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\]\$ '
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.