当前目录有.git文件夹时能否提示显示GIT?

当前目录有.git文件夹时能否提示显示GIT?

当前目录时可以提示显示GIT吗有/包含一个.git文件夹?有没有办法做到这一点?我当前的提示定义如下:

export PS1="[\u@\h] \w $ "

所以,我的提示看起来像这样:

[user@computer] ~/workspace  $

我希望它动态地看起来像这样:

[user@computer] ~/workspace GIT $

答案1

__git_ps1最标准的方法是直接从 git使用。在 Ubuntu 中,可以通过以下路径获取:

source /usr/lib/git-core/git-sh-prompt
## source /etc/bash_completion.d/git-prompt
#PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w $(__git_ps1 "(%s)")\$ '

您可以注意到添加的部分$(__git_ps1 "(%s)"),它将通知您有关存储库的当前状态——当前分支、正在进行的变基、合并等。

Ubuntu中的文件由git包提供:

$ dpkg-query -S /usr/lib/git-core/git-sh-prompt
git: /usr/lib/git-core/git-sh-prompt

对于 Fedora git-core(路径略有不同):

rpm -qf /usr/share/git-core/contrib/completion/git-prompt.sh
git-core-2.5.5-1.fc23.x86_64

您的提示将从

[user@computer] ~/workspace $ 

[user@computer] ~/workspace (master)$ 

答案2

您可能会对此感到更满意:这里有一个 .git 文件夹吗或在我的父目录之一中

in_git () { 
    local dir=$PWD
    until [[ $dir == / ]]; do 
        [[ -d "$dir/.git" ]] && return 0
        dir=$(dirname "$dir")
    done
    return 1
}                                             

那么你的提示是

PS1='[\u@\h] \w $(in_git && echo "GIT ")\$ '                                 

如果您位于存储库的某个子目录中,这将显示 GIT 指示器。

答案3

感谢您的所有回答!我最终将其放入我的 .bash_profile (在 Mac 上):

parse_git_branch() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}
export PS1="\u@\h \[\033[32m\]\w\[\033[33m\]\$(parse_git_branch)\[\033[00m\] $ "

答案4

您可以安装https://github.com/nojhan/liquidprompt哪个会显示 偏差 ± 在哪里 ±意味着 git 和开发者是你当前所在的 git 分支。

相关内容