Git Bash 提示 - 当前分支名称在 Git 命令后停止显示

Posted

技术标签:

【中文标题】Git Bash 提示 - 当前分支名称在 Git 命令后停止显示【英文标题】:Git Bash Prompt- Current Branch Name Stops Showing After Git Command 【发布时间】:2017-07-31 23:35:55 【问题描述】:

将 GitBash 与 Git for Windows 一起使用,我的 PS1 变量设置为显示当前分支:

$ echo $PS1
\[\033]0;$TITLEPREFIX:$PWD//[^[:ascii:]]/?\007\]\n\[\033[32m\]\u@\h \[\033[35m\]$MSYSTEM \[\033[33m\]\w\[\033[36m\]`__git_ps1`\[\033[0m\]\n$

这很好启动,例如我的提示开始像

myuser@mypc MINGW64 /c/git/myrepo (master)
$

但是,在我运行任何 git 命令后,当前分支部分会被忽略,直到我重新启动 shell。

myuser@mypc MINGW64 /c/git/myrepo (master)
$ git branch
* master
  myOtherBranch

myuser@mypc MINGW64 /c/git/myrepo
$

但是如果我运行 __git_ps1 它仍然会告诉我正确的值:

myuser@mypc MINGW64 /c/git/myrepo
$ echo `__git_ps1`
(master)

myuser@mypc MINGW64 /c/git/myrepo
$

有什么想法会发生什么,或者我该如何诊断/解决这个问题?

【问题讨论】:

我有相同的PS1 值并且没有观察到这种行为。在您运行 git 命令之后但在重新启动 shell 之前(即,当它没有显示分支名称时),您是否验证了 PS1 值仍然与您预期的一样? (它不应该改变,但也许设置了一个别名,它正在做不应该做的事情;是否有人可以访问您的个人资料,这可能是在开个小玩笑?) 我做到了,是的。运行命令前后的值相同。我可能应该提到的另一个事实是,它之前运行良好,但在从版本 2.8.0.windows.1 升级到 2.12.0.windows.1 后停止运行。 刚刚对我的一个系统进行了测试升级到 2.12.0.windows.1(64 位),但仍然无法重现该问题。版本可能是一个因素,但肯定还有更多。 我并不感到惊讶 - 如果每个人都看到它,那么 Google 搜索就会有结果。我想作为一个 Bash 菜鸟,我想知道是否有人知道一种方法可以对其进行一些诊断以深入挖掘。 回滚到以前的 Git 版本,一切正常。我真的不需要升级,所以我不会再调查了。 【参考方案1】:

所以我能够根据this 和此问题中已有的信息让事情再次正常运行。我将以下内容添加到我的 .bashrc 文件中,一切都很好。我不确定问题的根本原因可能是什么,但这对我来说似乎是一个很好的解决方法。

update_PS1 () 
  PS1="\[\033]0;$TITLEPREFIX:$PWD//[^[:ascii:]]/?\007\]\n\[\033[32m\]\u@\h \[\033[35m\]$MSYSTEM \[\033[33m\]\w\[\033[36m\]`__git_ps1`\[\033[0m\]\n$ "

shopt -u promptvars
PROMPT_COMMAND=update_PS1

【讨论】:

它给了我这个错误:bash: __git_ps1: command not found【参考方案2】:

我也有同样的问题。运行任何 git 命令后,当前分支名称消失。首先,我使用来自答案https://***.com/a/43659303/8156156 的提示。效果很好。

但经过调查,我发现我不仅有这个问题,还有 bash 的其他问题。我写在https://github.com/git-for-windows/git/issues/1153#issuecomment-308110681。

我不知道这些问题的根源,但对我有用的解决方法(对于这两个问题)是安装适用于 Windows 的 32 位版本的 Git(Git-2.13.1-32 位)。

【讨论】:

【参考方案3】:

Ubuntu:在终端上显示您的分支名称 在 ~/.bashrc 文件中添加这些行

# Show git branch name
force_color_prompt=yes
color_prompt=yes
parse_git_branch() 
 git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'

if [ "$color_prompt" = yes ]; then
 PS1='$debian_chroot:+($debian_chroot)\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\$ '
else
 PS1='$debian_chroot:+($debian_chroot)\u@\h:\w$(parse_git_branch)\$ '
fi
unset color_prompt force_color_prompt

关闭并打开您的终端

【讨论】:

对于 Windows GitBash,您可以删除不需要的 $debian_chroot:+($debian_chroot)。在操作系统更新后我的分支今天停止出现后,对我来说效果很好。

以上是关于Git Bash 提示 - 当前分支名称在 Git 命令后停止显示的主要内容,如果未能解决你的问题,请参考以下文章

text 自定义BASH PS1提示以显示当前的GIT存储库和分支

在 Linux 上显示当前分支和着色(如 Windows 上的 Git Bash)

让 shell 显示当前 git 的分支名称

在 Shell 提示符中显示 Git 分支名称

sh 颜色有趣你的bash提示+ git分支

定制性感Bash提示-Git分支/状态