windows - Git Bash for Windows 的提示到底在哪里定义?

标签 windows git bash prompt

我的办公室和家里的电脑都有来自相同来源的 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 的提示在两台计算机上是如何不同的(以及如何解决这个问题)。

几个答案(如 thisthisthis )建议我,我应该寻找 .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/

相关文章:

c++ - 如何使用 C++ 在 Windows 和 Linux 中获取 iSCSI 启动器名称

c++ - 将 HBITMAP 绘制到分层窗口上。怎么了?

regex - grep : Regex for IP doesnt match

linux - 从文件内部删除模式条目

bash - 将所有 .jpeg 从目录结构移动到 Mac OS X 上的一个文件夹中

c - 如何验证文件名在 Windows 中是否有效?

ruby - 是否可以在 ruby​​/tk 中使用 unicode 字符?

php - Git 将 git HEAD 和 repo 信息添加到文件中

Windows 上的 Git : "I don' t handle protocol 'git clone http' "

android - 上传AAR库到本地maven仓库并在git中共享build.gradle