在shell提示符中显示git分支?

在shell提示符中显示git分支?,git,branch,prompt,osx-lion,.bash-profile,Git,Branch,Prompt,Osx Lion,.bash Profile,我试图让shell提示符显示当前git分支名称 我已经阅读了一些教程和博客文章等,据我所知,我做的每件事都是正确的,但它似乎不起作用 我希望提示符如下所示: dannys-macbook:hillcrest-store [master]$ dannys-macbook:hillcrest-store danny$ 但现在看起来是这样的: dannys-macbook:hillcrest-store [master]$ dannys-macbook:hillcrest-store dann

我试图让shell提示符显示当前git分支名称

我已经阅读了一些教程和博客文章等,据我所知,我做的每件事都是正确的,但它似乎不起作用

我希望提示符如下所示:

dannys-macbook:hillcrest-store [master]$
dannys-macbook:hillcrest-store danny$ 
但现在看起来是这样的:

dannys-macbook:hillcrest-store [master]$
dannys-macbook:hillcrest-store danny$ 
我已将以下内容添加到~/.bash_配置文件中:

PATH=$PATH:/usr/local/bin; export PATH

COLOR1="\[\e[1;32m\]"
COLOR2='\[\e[1;1m\]'
COLOR3='\[\e[m\]'
GIT_STATUS=$(__git_ps1 " %s")
PROMPT_CHAR="$"

PROMPT="${COLOR1}\u@\h${COLOR3} \w${COLOR2}${GIT_STATUS} ${COLOR2}${PROMPT_CHAR$
PS1="$PROMPT"
export PS1

我不确定我做错了什么,也许我应该以某种方式“重置”提示?

您希望每次显示提示时,即在键入下一个命令之前,都更新PS1以包含当前分支。请bash通过在precmd函数中再次设置PS1来完成此操作。bash在显示提示之前运行此函数:

precmd() {
    PS1=...
}
COLOR1='\[\e[1;32m\]'
COLOR2='\[\e[1;1m\]'
COLOR3='\[\e[m\]'
GIT_STATUS='$(__git_ps1 " %s")'
PROMPT_CHAR='\$'
PS1="${COLOR1}\u@\h${COLOR3} \w${COLOR2}${GIT_STATUS} ${COLOR2}${PROMPT_CHAR}"

更简单的解决方案:引用GIT_状态,这样它不会在bash启动时得到评估,而是在bash显示提示时得到评估:

precmd() {
    PS1=...
}
COLOR1='\[\e[1;32m\]'
COLOR2='\[\e[1;1m\]'
COLOR3='\[\e[m\]'
GIT_STATUS='$(__git_ps1 " %s")'
PROMPT_CHAR='\$'
PS1="${COLOR1}\u@\h${COLOR3} \w${COLOR2}${GIT_STATUS} ${COLOR2}${PROMPT_CHAR}"

还请注意,导出PS1不是一个好主意。

首先从明显的开始,您是否在您的配置文件中找到了
git completion.bash
?您的
提示符=
行显然不完整,结尾与
${PROMPT\u CHAR$
。为什么导出PS1不是一个好主意?我在谷歌上搜索并找到了它。这似乎是一个很好的理由。+1谢谢。