如何让 Windows 中的 Git Bash 更好用呢?🤔
Git Bash
我们可以使用 starship 进行美化,然后在诸如 wezterm、cmder、vscode、JetBrains IDEA、Windows Terminal、zed 中配置默认打开的 shell 类型为 Git Bash。这样能够和 Linux 的操作基本保持一致。浪子强烈推荐使用。wezterm 挺好用的,内存占用稳定,而 Windows Terminal 打开一个 tab 占用内存就会增加一些。
Git Bash 读取的配置文件
Windows 安装 Git 后,默认使用的配置文件是 /etc/bash.bashrc,使用 Git Bash 的情况下可以直接使用 ls -al /etc 查看,在 Windows 中,Git Bash 下使用 / 表示 Git 的安装目录。
鉴于 Git 升级时都会覆盖掉 /etc/bash.bashrc 文件,所以推荐使用 ~/.bashrc(如果没有此文件可以新建),Git Bash terminal 启动时会加载此配置。
Git Bash 使用 starship
- Starship Release 页面下载最新版的
msi安装程序进行安装(这会自动添加环境变量,绿色版安装包解压后需要自行添加)。编辑~/.bashrc文件,添加以下内容:
eval "$(starship init bash)"
-
安装一款你喜欢的 Nerd Font 字体,并在
C:\Users\yourname\.minttyrc文件中配置以便在 Git Bash 可以更好的显示。Font=JetBrainsMono Nerd Font
Warning
这里只是修改原生 Git Bash 中的字体。如果使用了其它工具集成了 Git Bash(例如 windows terminal、vscode、idea 等),则此配置不会生效,需要在这些工具中自行配置。
- 重启/打开新的 Git Bash 就可以看到效果啦!可以参考 Starship 官方配置文档 或 社区 中定制自己的主题。
- Nerd Font 字体是在原有字体的基础上上添加了一些图标、emoji 和一些额外的“扩展”,可以显示特殊字符以及一些 icon。
- Git Bash 没有根据输入 自动显示建议 的功能(参考 Starship 官网主页的建议效果图),这和使用的 bash 有关。想要同样的效果,请考虑使用 zsh、fish 等其它 shell。
- VsCode 如果是 1.70.x ~ 1.90.0 版本(建议使用最新版),在 Git Bash 集成 starship 时,,需要在 settings.json 中设置 “terminal.integrated.shellIntegration.enabled”: false, 禁用 vscode 自动注入的终端集成。否则,在 vscode 中打开终端和执行命令后都需要等待较长时间。
其它配置
1. 字符集/别名配置
编辑 ~/.bashrc 文件,加入以下内容,保存退出并重启 Git Bash。
# 设置别名命令
alias ll="ls -al"
# git-bash 终端使用 utf-8 编码
export LANG="zh_CN.UTF-8"
export LC_ALL="zh_CN.UTF-8"
2. 二进制可执行文件
Windows 中有很多的简易二进制可执行文件,例如:shellcheck、jq、yq、nc、xh 等等,这些工具可以统一放置在一个目录下,配一个环境变量,然后全局都可以使用;如果经常使用 Git Bash,那么也可以直接放在 /usr/bin 目录下,此时不需要添加环境变量,但仅限 Git Bash 使用,PS 中就读取不到了。
二进制工具:
- lsd 具有 tree 命令的高级功能,推荐使用
- Windows tree 二进制文件 这是旧的 tree 工具
- jq 解压后名称改为 jq.exe 放入
/usr/bin - yq 解压后名称改为 yq.exe 放入
/usr/bin - nc(netcat) Windows 容易误杀,关闭防火墙
- shellcheck
- xh
上面的工具都可以把 xx.exe 改名后直接移动到 /usr/bin 目录中,重新打开 Git Bash 就可以使用了。如果不改名,jq 的 exe 可能是 jq-windows-amd64.exe,使用时需要敲击键盘比较多(虽然可以使用 tab,但还是啰唆)
Git For Windows 2.51 版本由于修改了 Windows 的路径分隔符,建议使用 cli 工具时不要添加
.exe后缀,否则自动补全会出现语法解析错误的问题。
tree
Windows 中自带的 tree 命令太拉胯,功能极其简单,所以需要一个好用的 cli,这里放的命令是基于旧版的 Windows tree 工具的,如今不推荐使用了,做个简单记录。
# 显示 num 层的目录
tree -AL 2
# 过滤某个文件夹(默认过滤子文件夹中的同名文件夹)
tree -I "node_modules"
常用选项:
| 选项 | 说明 |
|---|---|
| -a | 显示所有文件夹 |
| -A | 使用ASNI绘图字符显示树状图而非以ASCII字符组合。 |
| -C | 目录添加颜色 |
| -D | 显示修改时间 |
| -i | 不以阶梯状列出文件或目录名称 |
| -s | 显示文件大小 |
bash completion
completion (自动完成)是指在命令行中输入命令后,双击 tab 后显示命令选项提示列表的功能,Linux 中经常使用。其实大部分的命令行 cli 都支持 completion,方便人们使用,但是需要一些配置让使用的 shell 读取到才可以。
你可能已经听过了 bash-completion 项目,它是一个 bash 自动补全框架,提供了许多 常用命令 的自动补全脚本,使用非常方便。
fish completion 以
.fish结尾;zsh completion 以_开始,不带任何后缀;bash completion 可以没有任何后缀,也可以有.bash后缀。
Windows 下 Git Bash 默认读取 ~/bash_completion.d/ 目录的 completion 脚本,但里面的文件必须以 .bash 后缀结尾。这个不是很方便,因为 bash 类型的 completion 有些是带有 .bash 的,有些是没有后缀的。所以我们换个目录,打开 Git Bash,新建 /etc/bash_completion 目录:
mkdir -p /etc/bash_completion
编辑 ~/.bashrc 文件,添加以下内容:
if [ -d /etc/bash_completion ]; then
for file in /etc/bash_completion/*; do
[ -f "$file" ] && . "$file"
done
fi
这样后续所有的 bash 类型的 completion 脚本都放到此目录中就可以啦~
上面的 xh 工具下载的压缩包中有 xh.bash 文件,将其移动到 /etc/bash_completion 中重新打开 Git Bash,输入 xh --ver 然后双击 tab。
而有些工具是需要生成的,例如 deno:
deno completion bash > /etc/bash_completion/deno.bash
重新打开 Git Bash,再次输入 deno in,然后双击 Tab 键。
Git 规范提交
Git 提交信息规范化有助于查错(甩锅),这样团队合作的时候,如果出问题可以先看 git log。但是如果提交的信息不明确那就……所以我们可以使用工具辅助在提交的时候必须填写相关内容。
如果你去观察 Github 上的多数项目提交记录,很多都以固定的几个单词开头,其后跟范围:feat(xxx)、fix(xxx)、docs(xxx) 等,这是如何实现的呢?首先,肯定不是每次提交输入的,毕竟最优秀的程序员都是追求懒的;如果借助的现代编辑器,那肯定是自身提供或有插件提供的,提交的时候填写就行了。
对于前端项目,经常使用的是 commitizen core + 各种适配器。不同适配器有不同的交互风格,比如 emoji 位置、支持的功能什么的。
commitizen:基于 Node.js 的 git commit 命令行工具,辅助生成标准化规范化的 commit message。
cz-git、git-cz、cz-customizable、cz-conventional-changelog 等是 commitizen 的适配器(也可以理解为 gui 交互窗口,窗口的 UI 各具特色):提交时选择的交互式页面,依赖于 commitizen 工作。你可以把这些适配器全部安装,然后一个一个体验一遍,找到自己喜欢的交互 UI 适配器使用。一个项目可以安装多个适配器,使用哪个适配器在 package.json 中配置即可。
czg
这是浪子之前一直在用的,它的安装、使用都非常方便,省去了很多的麻烦,也可以进行自定义配置,具体内容可以查看 [官方文档]。
- 无需前置配置,无需适配器,没有额外的步骤,你可以使用
npx | npm 脚本 | 全局下载...在你的任何项目中快速启动。 - 可定制化: 内部包含 cz-git 的核心,继承了 cz-git 的所有特性,具有相同的行为,配置加载… 你可以根据自己的需要配置的 CLI 的行为。
# 全局安装
npm i -g czg
# 特性以及帮助文档
czg --help
# 使用 deno 全局安装
deno install -A -g npm:czg
convco
后来发现了一个工具:convco,只需要一个二进制文件即可,目前暂不支持 emoji。挺好用的,就换过来了,也支持 completion:
convco completions bash > /etc/bash_completion/convco

说些什么吧!