如果它是 PS1 中的 git 目录,则仅显示 git 根目录

如果它是 PS1 中的 git 目录,则仅显示 git 根目录

我知道你可以为 PS1 做类似的事情:

Corvid @ ~/github/gitdirectory (master) $

但是,这可能有点奇怪:无论我在该目录中的哪个位置,我都只想显示 git 目录的基本名称,不带任何前缀。如果我不在 git 目录中,我不想显示任何内容

例如,如果我在家,我希望它显示:

Corvid $

如果我进入了 git 目录,我希望它显示:

Corvid @ git_project (master)

如果我在该目录中移动,我不希望它向路径添加任何内容。因此,如果我在~/git/git_project/users/authenticate.py某个地方,我只希望它显示Corvid @ git_project (master)

如何通过 PS1 实现这一点?

答案1

我的PS1-fu 不是那么好,但我认为这可能会有用:

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

parse_git_tag () {
    git describe --tags 2> /dev/null
}

function git_prompt () {
    local OUT=
    local GIT_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)

    if [[ -n $GIT_ROOT ]]
    then
        OUT=" @ $(basename '$GIT_ROOT')"
        local GIT_BRANCH="$(parse_git_branch)"
        if [[ "$GIT_BRANCH" == " ((no branch))" ]]
        then
            $GIT_BRANCH="($(parse_git_tag))";
        fi
        OUT="$OUT $GIT_BRANCH"
    fi
    echo $OUT
}

PS1="\u \$(git_prompt) \$ "

影响:

bro3886:~/devel$ bash
bro3886  $ cd
bro3886  $ cd devel/nlp/corpora
bro3886 @ nlp (master) $ 

改编自在 Bash 提示符中显示 Git 分支或标签名称命令提示符目录样式

相关内容