背景
Git Bash 在 WSL 出现之前一直是 Windows 开发必不可少的工具。哪怕不使用 unix toolchain,git 也是免不了要用的。在 WSL 出现后它依然没有退出历史舞台——至少 VS Code 目前还需要 Git for Windows 来整合 git 功能。此外,Git bash 是基于 MSYS2 开发的,而 MSYS2 在一些从 *nix 移植到 Windows 的项目上不可或缺。
然而,Git for Windows 中的 MSYS2 环境是刻意缩减过的。最重要的是他没有 pacman 包管理系统。如果不想装两份 MSYS2(一份完整的,一份 Git for Windows),那么 Git for Windows 官方提供了两种方案:使用 Git for Windows SDK,或在已有的 MSYS2 中安装 Git for Windows SDK。
注:Git for Windows 修改过 MSYS2 的运行环境。未经修改的运行环境不能很好的在 Windows 下互操作,例如 Powershell 中连 git status 都会无法执行。因此在 MSYS2 中安装 Git for Windows 会覆盖原版的 MSYS2 运行环境。
摆脱 SDK
Git for Windows SDK 是一套为了开发 Git for Windows 而存在的环境。把这套 SDK 当 MSYS2 使用会有诸多不便。我只是想把完整的 MSYS 和 Git for Windows 合二为一而已,但在已有的 MSYS2 中安装 Git for Windows SDK 教程中却把 SDK 一同装上了。不装 SDK 其实很简单,不安装 git-extra 包即可。也就是最后一步的命令改为: pacboy sync git:x git-doc-html:x git-doc-man:x curl:x。
在 PowerShell 中调用 Git for Windows
简单来说就是要把 git、vim 和 less 暴露在 Windows 的 PATH 下面。我找到的比较简单而且只将这三个添加到 PATH 中不暴露其他 unix toolchain 的方法是:新建一个文件夹,把这个文件夹添加到 PATH 中,然后在这个文件夹中建立一些 cmd 文件指向真实的可执行文件。
1 2 |
@echo off C:\tools\msys64\cmd\git.exe %* |
1 2 3 |
@echo off set LESSCHARSET=utf-8 C:\tools\msys64\usr\bin\less.exe %* |
1 2 |
@echo off C:\tools\msys64\usr\bin\vim.exe %* |
1 2 |
git config --global core.editor vim.cmd git config --global core.pager less.cmd |
注:软链接是不行的,除非把 dll 一同软链接过来。
注:让 git 直接调用 vim 的完整路径是不行的,因为不然 vim 会读取 MSYS $HOME 下的 .vimrc 而不是 Windows 下的。
注:让 git 直接调用 less 的完整路径是不行的,因为不然无法设置 UTF8 的环境变量。
在 VS Code 中整合 Git for Windows
确保 git 在 PowerShell 中能调用后,将 settings.json 中的 git.path 设置为 git.cmd 即可。
附录:在 PowerShell 中一键启动 MSYS2
1 2 |
@echo off C:\tools\msys64\msys2_shell.cmd -mingw64 -defterm -no-start -here %* |
现在VSCode有WSL Remote扩展以后几乎可以抛掉Git for Windows了(不过你大概得把大部分项目文件全塞进WSL的文件系统里面)
如果是本来就在做跨平台开发那的确,但如果是 Windows only 的项目还是有 Git for Windows 会更舒服。