在 MSYS2 中安装 Git for Windows 并自定义 PATH 中的 toolchain

背景

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 文件指向真实的可执行文件。

注:软链接是不行的,除非把 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

发表评论?

2 条评论。

  1. 现在VSCode有WSL Remote扩展以后几乎可以抛掉Git for Windows了(不过你大概得把大部分项目文件全塞进WSL的文件系统里面)

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">