在 Shell 提示符中显示 Git 分支名称的方法

PS1介绍

PS1介绍

配置

获取branch名称

通过git branch获取(不推荐)

git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'

通过.git/HEAD 获取(推荐)

vi .git/HEAD
############
ef: refs/heads/dev
############

配置.bashrc

vim ~/.bashrc
######################
#获取branch名称
find_git_branch () {
    local dir=. head
    until [ "$dir" -ef / ]; do
        if [ -f "$dir/.git/HEAD" ]; then
            head=$(< "$dir/.git/HEAD")
                if [[ $head = ref:\ refs/heads/* ]]; then
                    git_branch="${head#*/*/}"
                elif [[ $head != '' ]]; then
                    git_branch="detached"
                else
                    git_branch="unknow"
                fi
                git_name_left="git:("
                git_name_right=")"
                return
            fi
        dir="../$dir"
    done
    git_branch=''
    git_name_left=""
    git_name_right=""
}

#将这个函数加入到 PROMPT_COMMAND 中,保证 Bash 在创建 prompt 之前调用这个函数取得分支名称:
PROMPT_COMMAND="find_git_branch; $PROMPT_COMMAND"

#颜色配置
black=$'\[\e[1;30m\]'
red=$'\[\e[1;31m\]'
green=$'\[\e[1;32m\]'
yellow=$'\[\e[1;33m\]'
blue=$'\[\e[1;34m\]'
magenta=$'\[\e[1;35m\]'
cyan=$'\[\e[1;36m\]'
white=$'\[\e[1;37m\]'
normal=$'\[\e[m\]'

#配置PS1
PS1="$green$cyan\W$blue \$git_name_left$red\$git_branch$blue\$git_name_right\$ $normal"
####################

source ~/.bashrc

Git仓库效果:
在 Shell 提示符中显示 Git 分支名称的方法

非Git仓库效果
这里写图片描述