将以下代码复制到~/.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未测试,不过原理应该相同,代码解读纯属个人理解,如果错误欢迎指正~