我的办公室和家里的电脑都有来自相同来源的 Windows 版 Git Bash(Git for Windows,随 TortoiseGit 一起提供),但是 Git Bash 在两台机器上的提示不同:
- 在办公电脑上,我有
/c/path (branch)
全部是绿色的(这就是我希望的样子), - 在家用电脑上我只有路径(没有分支)而且全是白色。
直到现在我才被告知,这是 PS1
变量,保存在 ~/.bashrc
文件中。然而,在两台机器上,这个文件都丢失了(执行 notepad ~/.bashrc
打开空的记事本)。
我迷路了。如果 ~/.bashrc
不存在,那么 Git Bash 从哪里“知道”它应该在绿色提示中显示当前分支?为什么第二台机器上没有发生同样的情况?
编辑:我还尝试比较两台机器的 c:\Program Files\Git\etc\
文件夹内容和 Git Bash 的内容.vbs
文件。两台计算机上的相同,所以我更不知道 Git Bash 的提示在两台计算机上是如何不同的(以及如何解决这个问题)。
几个答案(如 this 、 this 和 this )建议我,我应该寻找 .bash_profile
和 .bash_prompt
文件。不幸的是,这两个在我的两台计算机上也都丢失了。
在 Windows 7 下究竟是由什么文件决定的?我还应该在哪里寻找,PS1
变量的值应该是多少,才能在两台机器上以绿色提示显示当前分支?
最佳答案
Windows 上的 Git 几乎总是使用 bash shell。因此,Git 不像 Bash 那样设置提示。
在 Bash 中有两种设置提示的方法。一个是 PS1
命令相当灵活,但仅限于一组特定的转义字符序列。不幸的是,Git 信息不是那些转义序列之一(尽管我怀疑它有一天会出现)。您可以使用第二种方式通过设置 PROMPT_COMMAND
来设置提示。环境变量。如果已设置,$PROMPT_COMMAND
被执行并用作提示而不是 PS1
环境变量。
当您使用 BASH 安装标准 Git 时,您的 Git 提示符定义在 /etc/profile
下文件。顺便说一下,etc
是你安装 Git 的目录,通常在 %PROGRAMFILES%
下除非你在安装 Git 时更改了它。
在/etc/profile
下在我的版本中第 156 行的脚本中,您会看到 PS1
正在设置和使用命令 $(__git_ps1)
在 $PS1
作为在提示符下执行外部命令的一种方式。 (我之前没有提到的第三种方式)。
__git_ps1
是一个壳函数。您还会注意到上面的一点(我的版本中的第 154 行)/etc/git-completion.bash
正在采购以及/etc/git-prompt.sh
.这是/etc/git-prompt.sh
定义了 __git_ps1
函数(我的版本中的第 273 行)已定义。你会注意到 __git_ps1
函数引入了 /etc/git-prompt.sh
中定义的其他几个函数.
因此,以一种非常 Rube Goldberg 的方式,在 /etc/profile
中定义了 Git 提示符。通过定义 $PS1
pull 入 /etc/git-prompt.sh
它定义了一个 __git_ps1
pull 入 __git_ps1_show_upstream
的函数函数和 __git_ps1_colorize_gitstring
功能。然后,$PS1
使用 $(...)
字符串作为 pull 入 __git_ps1
的一部分功能进入PS1
.
您可以定义自己的$HOME/.bash_profile
覆盖提示设置的方式来定义您自己的提示。而且,当您这样做时,您还可以使用 __git_ps1
在您自己的提示中执行 Bash 函数。
或者,您可以简单地决定什么都不碰,然后非常缓慢地后退。毕竟,您可能还有实际工作要做。
关于windows - Git Bash for Windows 的提示到底在哪里定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22689548/