在提示符下配置git分支

时间:2014-09-18 11:32:07

标签: linux git bash

我更新了我的bash文件,以便按照here说明显示当前的Git分支。我最终使用的是

PS1="\u@\h \W \$(__git_ps1)\$ "

...然而

  1. 我无法将(branch)替换为[branch],即在括号内显示分支名称而不是括号。
  2. 原始版本有颜色:

    PS1="\[$GREEN\]\t\[$RED\]-\[$BLUE\]\u\[$YELLOW\]\[$YELLOW\]\w\[\033[m\]\[$MAGENTA\]\$(__git_ps1)\[$WHITE\]\$ "
    

    但是当我使用它时,我没有看到任何颜色。我怎样才能看到颜色以及shell使用的标准设置?

3 个答案:

答案 0 :(得分:4)

1 - 用括号而不是parens

分隔分支名称

以下是.git-prompt.sh文件的相关段落(在现代Git版本中,包含__git_ps1函数的定义):

#    3a) Change your PS1 to call __git_ps1 as
#        command-substitution:
#        Bash: PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
#        ZSH:  setopt PROMPT_SUBST ; PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ '
#        the optional argument will be used as format string.

__git_ps1接受一个可选参数,您可以使用该参数自定义字符串的格式。在您的情况下,您应该使用

PS1="\u@\h \W \$(__git_ps1 '[%s]')\$ "

2 - 使用颜色

您可以在问题的代码中使用颜色,但需要确保定义了相关变量。将以下行放在~/.bashrc文件中的某处:

RED=$(tput setaf 1)
GREEN=$(tput setaf 2)
YELLOW=$(tput setaf 3)
BLUE=$(tput setaf 4)
MAGENTA=$(tput setaf 5)
WHITE=$(tput setaf 7)
RESET=$(tput setaf 0)

在获取~/.bashrc文件后,您将能够使用这些颜色。 例如,以下是您的提示的简化版本,其中当前分支名称(和周围的括号)以红色突出显示:

PS1="\W \[$RED\$(__git_ps1 '[%s]')\]\[$RESET\$\] "

enter image description here

答案 1 :(得分:1)

  1. 您正在使用的__git_ps1函数将格式字符串作为参数。因此,您可以使用%s传递所需的任何内容,以便显示分支名称。例如:

    PS1="\u@\h \W \$(__git_ps1 '[%s]')\$ 
    
  2. 对于颜色没有任何线索,抱歉。

答案 2 :(得分:0)

这有效:

function parse_git_dirty {
    [[ $(git status 2> /dev/null | tail -n1) != "nothing to commit, working directory clean" ]] && echo "*"
}
function parse_git_branch {
    git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/[\1$(parse_git_dirty)]/"
}
PS1="\[$Blue\][\[$Cyan\]\d\[$Blue\]] "          # Display date
PS1=$PS1"\[$Yellow\]\@:"                        # Display time
PS1=$PS1"\[$BGreen\]\w"                         # Display a green pwd
PS1=$PS1"\[$BCyan\]"'$(parse_git_branch)'       # Display a cyan git-branch
PS1=$PS1"\[$Color_Off\]$ "                      # Turn off color and end prompt
export PS1=$PS1                                                               

它产生这样的东西:

[Thu Sep 18] 12:44 PM:~/repos/test[master*]$