«

如何在linux终端实时显示当前git分支

时间:2024-2-16 13:43     作者:韩俊     分类: Linux


如何在终端实时的展示当前所处的git分支?这里主要是在linux的shell中的PS1, PS2,PS3, PS4这些环境变量中动手脚达到这个目的,现在记录一下操作过程备忘。

实际效果如下图:

如何在linux终端实时显示当前git分支

先来说说linux shell中的PS1,PS2,PS3,PS4 这几个环境变量。

注意:以下操作都是在 ~/.bashrc 文件。

PS1表示的默认交互提示,在ubuntu-12.04中的默认值是

"\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$"

也就是我们通常可以看到的:

yhm@yhm-pc:~/www.maopiaopiao.com$ 

在PS1中

\u -- 表示用户名

\h -- 表示主机名

\w -- 当前目录的全局路径,如果是home目录,显示~

\s -- 表示的bash

\v -- 表示版本

所以你可以修改默认的提示符:

export PS1="\u@\h-\v \w> "

按照上面的提示,显示的就是

yhm@yhm-pc-4.2 ~/www.maopiaopiao.com

通常情况下,我们只会用到PS1,但是当我们需要继续交互的时候,就会用到PS2,比方说输入命令行使用\来进行下一行处理。例如简单一些:

ls \

则会出现下面的提示符号,也就是PS2的内容

>

通常我们会用到的就这两个。

shell在执行PS1前,会先执行 PROMPT_COMMAND 这个指令,并且显示在PS1之前。所以我们可以在终端的 PROMPT_COMMAND 上做一些操作以达到我们本文的目的,实时显示当前所处的git分支。

我们先试验一下,修改 PROMPT_COMMAND 为下面的值:

export PROMPT_COMMAND="echo -n [$(date +%H:%M:%S)]"

那么提示符号将显示为:

[21:40:17]yhm@yhm-pc:~/www.maopiaopiao.com$

注意时间是定格的

可以使用unset方法来取消 PROMPT_COMMAND

git基础

git是存在分支的,当前所在的git分支可以通过git branch来察看。

另外一种方式,获取.git/HEAD文件中的内容,格式是:

ref: refs/heads/当前分支名称

现在来说一下具体的实现在终端实时展现git分支操作:

直接将如下代码拷贝到 ~/.bashrc 文件的最末行中去即可(也即追加到该文件中)。

#git目录快速显示当前的分支名
function 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=' (unknown)'
            fi
            return
        fi
        dir="../$dir"
    done
    git_branch=''
}
function myPS1() {
    find_git_branch
    green=$'\e[1;32m'
    red=$'\e[1;31m'
    blue=$'\e[1;34m'
    normal_colours=$'\e[m'
    PS1="\[$green\]\u@\[$blue\]\w\[$red\]$git_branch\[$green\]\\$\[$normal_colours\]"
}
PROMPT_COMMAND=myPS1

标签: linux

热门推荐