mac/linux默认终端显示git分支名称与状态

2,334 阅读1分钟

将以下代码复制到~/.bashrc文件中

function parse_git_dirty() {
    local git_status=$(git status 2>/dev/null | head -n4)
    if [[ "$git_status" != "" ]]; then
        local git_now # 标示
        if [[ "$git_status" =~ "无文件要提交,干净的工作区" ]]; then
            git_now="="
        elif [[ "$git_status" =~ "尚未暂存以备提交的变更:" ]]; then
            git_now='~'
        elif [[ "$git_status" =~ "要提交的变更:" ]]; then #Changes to be committed
            git_now='*'
        elif [[ "$git_status" =~ " " ]]; then
            git_now="#"
        fi
        echo "${git_now}"
    fi
}

function git-branch-name() {
    git symbolic-ref --short -q HEAD 2>/dev/null
}
function git-branch-prompt() {
    local branch=$(git-branch-name)
    if [ $branch ]; then printf " [%s]" $branch; fi
}

PS1="[\u@\h \[\033[0;36m\]\W\[\033[0m\]\[\033[0;32m\]\$(git-branch-prompt)\[\033[0;31m\]\$(parse_git_dirty)\[\033[0m\]$ "

代码解读

  • parse_git_dirty这个函数是用来获取分支的状态,由于我的git是中文提示,所以下面的判断也是中文的,2>/dev/null的意思是防止不在git的文件无法找到git分支报错(个人理解),head -n4的意思是取命令返回信息的第四行
  • git-branch-name是用来获取分支名称的
  • git-branch-prompt调用git-branch-name并格式化输出分支名称

修改后终端会稍稍有些慢,但是比起zsh/oh my zsh要快得多,样式也没有前者好看,介意的话请绕行~

以上代码本人在mac上亲测有效,linux未测试,不过原理应该相同,代码解读纯属个人理解,如果错误欢迎指正~