Git Bash 提示符简化(就是每次敲命令时上面显示的那一行信息)

Git Bash 提示符简化

1、背景

在 Git Bash 启动后,命令输入前显示的这一段专业上通常叫 Shell prompt,在 Bash 环境中也可以叫 Bash prompt 或"命令提示符"。默认提示符通常类似下面这样:

bash 复制代码
Alice@DESKTOP-ABC123 MINGW64 /xxx/xxx/xxx
$

其中:

  • Alice 是当前用户名。
  • DESKTOP-ABC123 是主机名。
  • MINGW64 表示当前 Git Bash / MinGW 环境。
  • /xxx/xxx/xxx 是当前所在路径。
  • 如果当前目录是 Git 仓库,默认提示符还会在路径后显示当前 Git 分支,例如 (main)
    • 比如:Alice@DESKTOP-ABC123 MINGW64 /xxx/xxx/xxx (main)

需求是简化提示符,去掉较长且日常使用价值不高的 主机名MINGW64,保留更关心的信息:

bash 复制代码
Alice /xxx/xxx/xxx
$

最终目标是在 Git 仓库目录下同时保留当前分支显示:

bash 复制代码
Alice /xxx/xxx/xxx (main)
$

非 Git 仓库目录下则保持为:

bash 复制代码
Alice /xxx/xxx/xxx
$

2、解决方案

最终是在用户目录下的 Git Bash 启动配置文件中追加自定义 PS1 配置:

bash 复制代码
# Custom Git Bash prompt: user path + Git branch
if ! type __git_ps1 >/dev/null 2>&1; then
  test -f /etc/profile.d/git-prompt.sh && . /etc/profile.d/git-prompt.sh
fi

if type __git_ps1 >/dev/null 2>&1; then
  PS1='\[\033]0;$TITLEPREFIX:$PWD\007\]\[\033[32m\]\u \[\033[33m\]\w\[\033[36m\]$(__git_ps1 " (%s)")\[\033[0m\]
$ '
else
  PS1='\[\033]0;$TITLEPREFIX:$PWD\007\]\[\033[32m\]\u \[\033[33m\]\w\[\033[0m\]
$ '
fi

该配置写入的位置是:

text 复制代码
C:\Users\Alice\.bashrc

同时确认了:

bash 复制代码
C:\Users\Alice\.bash_profile

会加载 .bashrc

bash 复制代码
test -f ~/.profile && . ~/.profile
test -f ~/.bashrc && . ~/.bashrc

因此重新打开 Git Bash,或者在已打开的 Git Bash 中执行下面命令即可生效:

bash 复制代码
source ~/.bashrc

3、分析

3.1 为什么修改 .bashrc

Git Bash 启动时会读取用户目录下的启动配置文件。当前机器上的 .bash_profile 已经包含:

bash 复制代码
test -f ~/.bashrc && . ~/.bashrc

这表示如果 ~/.bashrc 存在,就加载它。因此把提示符配置写在 .bashrc 中,可以在每次打开 Git Bash 时自动生效。

3.2 PS1 是什么

PS1 是 Bash 的主提示符变量,其中 PS 可以理解为 prompt string。终端里每次等待输入命令时,前面显示的 Shell prompt / Bash prompt 内容就是由 PS1 控制的。

例如:

bash 复制代码
PS1='\u \w
$ '

大致表示:

  • \u:显示当前用户名,例如 Alice
  • \w:显示当前路径。
  • 换行后显示 $ ,作为输入命令的位置。

3.3 为什么要显式处理 Git 分支

Git Bash 提示符中的分支信息不是 Bash 自动提供的,而是依赖 Git 提供的辅助函数 __git_ps1。因此自定义 PS1 时,如果希望继续显示当前 Git 分支,就需要在提示符中显式调用这个函数。

3.4 __git_ps1 的作用

__git_ps1 是 Git prompt 脚本提供的函数,用来在当前目录是 Git 仓库时输出分支信息。

配置中使用了:

bash 复制代码
$(__git_ps1 " (%s)")

含义是:

  • 如果当前目录是 Git 仓库,则输出当前分支。
  • " (%s)" 是输出格式,%s 会被替换为分支名。
  • 当前分支为 main 时,输出结果是 (main)
  • 前面的空格用于让路径和分支之间有间隔。

所以最终效果类似:

bash 复制代码
Alice ~/project (main)
$

3.5 为什么要先检查 __git_ps1

配置中有两次检查:

bash 复制代码
if ! type __git_ps1 >/dev/null 2>&1; then
  test -f /etc/profile.d/git-prompt.sh && . /etc/profile.d/git-prompt.sh
fi

第一段表示:如果当前 Shell 还没有 __git_ps1 函数,就尝试加载 Git Bash 自带的 prompt 脚本:

bash 复制代码
/etc/profile.d/git-prompt.sh

随后再次检查:

bash 复制代码
if type __git_ps1 >/dev/null 2>&1; then

这是为了确认加载是否成功。

如果 __git_ps1 可用,就使用带 Git 分支的提示符;如果不可用,就退回到只显示用户名和路径的提示符。这样即使某些环境下 Git prompt 脚本不存在,Git Bash 也不会报错。

3.6 颜色和终端标题控制

配置中的这些内容用于颜色和终端标题:

bash 复制代码
\[\033]0;$TITLEPREFIX:$PWD\007\]
\[\033[32m\]
\[\033[33m\]
\[\033[36m\]
\[\033[0m\]

含义大致是:

  • \[\033]0;$TITLEPREFIX:$PWD\007\]:保留 Git Bash 原有的窗口标题更新行为。
  • \[\033[32m\]:后续文本显示为绿色。
  • \[\033[33m\]:后续文本显示为黄色。
  • \[\033[36m\]:后续文本显示为青色。
  • \[\033[0m\]:重置颜色,避免输入的命令继续继承提示符颜色。

外层的 \[\] 用于告诉 Bash:这些是不可见的控制字符,不应该计入提示符宽度。这样可以避免光标位置、换行、退格等行为出错。

4、参考

本次操作主要参考了当前机器上的实际配置和 Git Bash 自带行为:

  • C:\Users\Alice\.bashrc:最终写入自定义提示符配置的位置。
  • C:\Users\Alice\.bash_profile:确认 Git Bash 启动时会加载 .bashrc
  • /etc/profile.d/git-prompt.sh:Git Bash 中提供 __git_ps1 函数的 prompt 脚本。
  • Git Bash 的 bash.exe 路径:本机实际使用的 Git Bash 可执行文件路径,用于验证配置加载。
相关推荐
凯尔萨厮20 小时前
Git(学习笔记)
笔记·git·学习
一技安身1 天前
【Git】零基础入门实战教程(Windows 完整版,适配竞赛仓库)
windows·git
LXY_BUAA1 天前
Git_在飞牛中部署 GitLab_20260817
git·gitlab
阳墨余1 天前
Git 同时管理 Gitee 和 GitHub 的 SSH 配置实战
git·gitee·github
fengyehongWorld1 天前
Git 认证凭据管理
git
暮云星影2 天前
git版本发布
git·gitee·github·gitea
乌夷2 天前
Git Flow 分支模型
git
独隅2 天前
VS Code Git 工作树多分支并行开发实战评测
git
暮云星影2 天前
git仓库分支管理
git·gitee·github·gitea
深海鱼在掘金3 天前
深入浅出RAG——第7章:基础篇实战:文档问答机器人
人工智能·typescript·命令行