将 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$
Run Code Online (Sandbox Code Playgroud)
这可以很好地启动,例如我的提示符开始像
myuser@mypc MINGW64 /c/git/myrepo (master)
$
Run Code Online (Sandbox Code Playgroud)
但是,在我运行任何 git 命令后,当前分支部分将被忽略,直到我重新启动 shell。
myuser@mypc MINGW64 /c/git/myrepo (master)
$ git branch
* master
myOtherBranch
myuser@mypc MINGW64 /c/git/myrepo
$
Run Code Online (Sandbox Code Playgroud)
但如果我运行 __git_ps1 它仍然告诉我正确的值:
myuser@mypc MINGW64 /c/git/myrepo
$ echo `__git_ps1`
(master)
myuser@mypc MINGW64 /c/git/myrepo
$
Run Code Online (Sandbox Code Playgroud)
有什么想法可能会发生什么,或者我如何诊断/解决这个问题?
因此,我能够根据此问题以及此问题中已有的信息使事情再次正常运行。我将以下内容添加到我的.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
Run Code Online (Sandbox Code Playgroud)