自定义带有颜色的git分支的bash提示符(PS1)

时间:2014-04-01 17:17:35

标签: git bash shell

我目前正在使用git-prompt.sh自定义我的bash提示符(PS1),以便在我的bash提示符中显示我的git repo的状态。

This stackoverflow answer非常有帮助,但不完全是我正在寻找的。

我当前的.bashrc显示如下:

[aj@computer-name my_current_working_directory (git-branch-name)]$

我的.gitconfig使用以下内容:

[color "status"]
  added = green
  changed = yellow
  untracked = red

问题是。我如何实现以下目标?

我希望我的bash提示符继续以上面的方式显示,但根据我在.gitconfig中设置的状态颜色更改(git-branch-name)的颜色

万分感谢!

2 个答案:

答案 0 :(得分:2)

我在一篇关于自定义提示的文章中找到了这个代码段。 这不是您正在寻找的,但只需要一些小的修改。 有些颜色未在此代码段中定义,但可以找到here

export PS1=$IBlack$Time12h$Color_Off'$(git branch &>/dev/null;\
if [ $? -eq 0 ]; then \
  echo "$(echo `git status` | grep "nothing to commit" > /dev/null 2>&1; \
if [ "$?" -eq "0" ]; then \
  # @4 - Clean repository - nothing to commit
  echo "'$Green'"$(__git_ps1 " (%s)"); \
else \
  # @5 - Changes to working tree
  echo "'$IRed'"$(__git_ps1 " {%s}"); \
fi) '$BYellow$PathShort$Color_Off'\$ "; \
else \
  # @2 - Prompt when not in GIT repo
echo " '$Yellow$PathShort$Color_Off'\$ "; \
fi)'

此处还有一个链接,其中包含提示

的自定义列表

http://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.html

答案 1 :(得分:2)

我今天想要一个类似的功能,我通过修改git-prompt.sh来实现它,如下所示:

__git_ps1_colorize_gitstring ()
{
    if [[ -n ${ZSH_VERSION-} ]]; then
        local c_red='%F{red}'
        local c_green='%F{green}'
        local c_clear='%f'
    else
        local c_red='\[\e[31m\]'
        local c_green='\[\e[32m\]'
        local c_clear='\[\e[0m\]'
    fi

    local branch_color=""
    if [ "$w" = "*" ]; then  # modified
        branch_color="$c_red"
    elif  [ -n "$u" ]; then  # untracked
        branch_color="$c_red"
    elif [ -n "$i" ]; then
        branch_color="$c_green"
    else
        branch_color="$c_clear"
    fi

    c="$branch_color$c"
    z="$c_clear$z"
    w=""
    i=""
    s=""
    u=""
    r="$c_clear$r" 
}

并将以下内容添加到我的.bashrc

GIT_PS1_SHOWDIRTYSTATE=1
GIT_PS1_SHOWUNTRACKEDFILES=1
GIT_PS1_SHOWCOLORHINTS=1

这会更改我的分支名称的颜色,而不会在提示中添加*%=字符串。