究竟是哪里定义了Git Bash for Windows'提示符?

tre*_*der 20 windows git bash prompt

我的办公室和家用电脑都有来自同一来源的Git Bash for Windows(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的提示在两台计算机上都有所不同(以及如何解决这个问题).

几个答案(像这样,这个这个)建议我,我应该寻找.bash_profile.bash_prompt文件.不幸的是,我的两台计算机上都缺少这两个.

究竟是什么文件决定在Windows 7下?我应该在哪里寻找,以及PS1变量值应该是什么,以便在两台机器上以绿色提示显示当前分支?

Dav*_* W. 24

Windows上的Git几乎总是使用bash shell.所以,Git 并不像Bash那样设置提示.

有两种方法可以在Bash中设置提示.一个是PS1相当灵活的命令,但仅限于一组特定的转义字符序列.不幸的是,Git信息不是那些逃逸序列之一(虽然我怀疑它有一天会到来).您可以使用第二种方法通过设置PROMPT_COMMAND环境变量来设置提示.如果设置了此项,$PROMPT_COMMAND则执行并将其用作提示而不是PS1环境变量.

当您使用BASH安装标准Git时,您在/etc/profile文件下定义了Git提示符.顺便说一句,etc是你安装Git的目录下的目录,%PROGRAMFILES%除非你在安装Git时更改了它.

/etc/profile我的版本中第156行的脚本下,您会看到PS1正在设置的命令并使用$(__git_ps1)in $PS1作为在提示符中执行外部命令的方法.(我之前没有提及的第三种方式).

__git_ps1是一个shell函数.您还会注意到以上内容(我的版本中的第154行)/etc/git-completion.bash以及来源/etc/git-prompt.sh.它/etc/git-prompt.sh定义了__git_ps1函数(我的版本中的第273行).你会注意到该__git_ps1函数引入了其中的几个其他函数/etc/git-prompt.sh.

因此,以一种非常Rube Goldberg的方式,Git提示被定义在/etc/profilevia中定义$PS1哪个pulls /etc/git-prompt.sh定义了一个__git_ps1拉入__git_ps1_show_upstream函数和__git_ps1_colorize_gitstring函数的函数.然后,$PS1使用$(...)字符串作为拉入__git_ps1函数的一部分PS1.

您可以定义自己$HOME/.bash_profile的方式来覆盖设置提示以定义自己的提示的方式.而且,当您这样做时,您也可以__git_ps1在自己的提示中使用Bash功能.

或者,你可以简单地决定不接触任何东西,然后慢慢地退回去.毕竟,你可能有实际的工作要做.

  • 对于 git 2.21.0,它位于 /etc/profile.d/git-prompt.sh 中 (3认同)

Emi*_*ily 8

在我的 Windows 10 上,__git_ps1定义在: 中
C:/Program Files/Git/etc/profile.d/git-prompt.sh