原文链接已失效。我在2024-03-11进行更新。

Git-SDK-简介

Git作为代码管理程序,自带一个好用的shell工具–Git Bash.

但在Windows中,git发行版自带的git bash是阉割版,git for windows sdk则包含一个完整版本的git bash,并且提供了一套基本完整的集成开发环境。

Git SDK 全称 Git for Windows SDK,是基于 MSYS2(MinGW64 + Cygwin 合体增强)的仿 Linux 环境, 当然 Git SDK 也比 MSYS2 更好用.

git-SDK预装了许多生产工具,如:git git-bash g++ make python(多版本) perl ruby sqlite msys clang mingW32 mingW64等。

安装后大约会占用 4~5 GB 的磁盘空间,但是包含了完整的仿 Linux 环境:包括常用工具,完整的 GNU Complier 链以及包管理器 pacman, 基本上是一套完整的集成开发环境。

- 如果在windows中有一些写代码的小需求,可只安装git;
- 为了获得非阉割版的git,建议一步到位安装Git-for-Windows-SDK;
- 当然任何情况下git都要保留,因为一些软件只认git.

Git-SDK的完整安装与配置

step1-安装win版的git

git-sdk 的安装器会从github的仓库中下载一些文件,所以需要先安装git。

进入Git for Windows 官网,点击如图按钮下载
Pasted image 20220522143956

step2-在git中配置代理

由于SDK所在的仓库在国外,所以需要设置代理。

git config --global http.proxy "http://127.0.0.1:7890"
git config --global https.proxy "http://127.0.0.1:7890"

step3-下载安装器

Git for Windows 官网,拉到最下面可以看到 Git SDK 的下载:Pasted image 20220522144342
点击进入,选择64位的安装器进行下载。

step4-运行安装器

双击后指定安装目录(e.g. D:\git-sdk-64),安装器将自动从一个仓库下载这个程序所需要的全部文件。仓库大小超过2G,所以下载可能需要一些时间。

如果安装过程中,报错安装失败,检查代理设置没问题后,手动打开安装目录,删除.git文件夹,然后以管理员身份运行安装目录下的setup-git-sdk.bat重新安装

step5-配置环境变量

在系统变量中新建一个变量GIT_HOME,值为你的sdk安装目录
然后在系统变量的Path中加入%GIT_HOME%%GIT_HOME%\cmd

这样做的效果是,在cmd或powershell中执行git命令时,系统使用的是你git sdk中的git

注意:教程作者说sdk\usr\bin目录最好不要加到系统变量,避免与其他类似工具比如 Gow 产生冲突。但我安装时找不到sdk\cmd, 同时我想能够在cmd或powershell中用上bash, 所以我没听教程作者的。

step6-更新源和核心包

修改 pacman 软件包源为国内源

在 ./etc/pacman.d/ 目录下有三个文件:mirrorlist.msysmirrorlist.mingw64 和 mirrorlist.mingw32;我们可以直接在 Windows 中使用文本编辑器修改它们为国内源:

mirrorlist.msys
Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch/
Server = http://repo.msys2.org/msys/$arch
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MSYS2/$arch
Server = http://www2.futureware.at/~nickoe/msys2-mirror/msys/$arch/
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch/
mirrorlist.mingw64
Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64/
Server = http://repo.msys2.org/mingw/x86_64
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MINGW/x86_64
Server = http://www2.futureware.at/~nickoe/msys2-mirror/x86_64/
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64/
mirrorlist.mingw32
Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686/
Server = http://repo.msys2.org/mingw/i686
Server = http://downloads.sourceforge.net/project/msys2/REPOS/MINGW/i686
Server = http://www2.futureware.at/~nickoe/msys2-mirror/i686/
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686/

注意服务器的顺序,将国内服务器放在优先的位置才能保证 pacman 优先使用它;

更新git SDK

官方文档:Updating your SDK

  • 更新SDK需要关掉所有的GitBash窗口,以防有文件被锁住。 需要启动Windows的cmd来更新,然后进入你的安装目录。 然后在此cmd窗口中执行update-via-pacman.bat。 不管有没有更新,每次总会重装git-extra
  • 也可以直接在文件浏览器中双击运行update-via-pacman.bat来完成更新。
  • 还可以调用pacman -Syu来一起更新核心的软件包(msys2-runtime、 bash以及pacman),因为这些软件在编译的时候互相依赖。 要保证他们的互相依赖是正确的。过程中可能需要关掉重开git-bash,也许需要多次执行pacman -Syu
  • 还可以逐一更新核心软件包,执行你的安装目录\git-cmd以进入一个cmd窗口,在其中执行:
    pacman -Sy --needed msys2-runtime
    pacman -Sy --needed pacman
    pacman -Sy --needed bash

如果更新时有报错,建议将msys2-runtime、bash和pacman分开来,单独升级。总之有可能会遇到比较奇怪的问题。
如果遇到某些错误无法更新,那么总是可以选择下载一个新的SDK,重新安装之。

step7-(可选)git-bash从阉割版到完整版

  • 使用pacman安装git
    git sdk中已经有了pacman,可以用它来安装完整版的git了: pacman -S git

  • 要卸载阉割版的git吗
    还记得上面step1安装的阉割版git吗?你可以卸载, 但建议不要.

    因为实践发现, 一些软件不认git sdk中的git,如vscode的gitlens插件.

Git-SDK成为你的生产力工具

当你用上了这个sdk里的bash.exe后, 你就在Windows的系统里无痛进入了Linux的世界.

值得注意的是,sdk包里有多个bash:

<your_sdk_path>/git-bash.exe, 只能以独立窗口形式打开;
<your_sdk_path>/usr/bin/bash.exe, 可以集成到其他软件的终端中, 如VScode、win11的终端集成软件;
<your_sdk_path>/mingw64.exe;

sdk里重要路径介绍

既然这是Linux的世界, 那它特殊的文件系统就要厘清一下.

安装完成后,假设你的安装目录是D:\git-sdk-64, 那么:

  • 你的这个仿Linux的根目录/,就是安装目录
  • 你的家目录~,仍是你windows中当前用户的个人文件夹:C:\Users\<user_name>\
  • 你的默认shell是:D:\git-sdk-64\git-bash.exe, 它等效于/mingw64.exe/usr/bin/bash.exe
    如果你需要配置shell,请像Linux一样, 直接在C:\Users\<user_name>\.bashrc中追加即可。
  • 你的其他磁盘路径可直接通过形如/c/Users/...的路径进入,但是根目录/下并没有c这个目录,且没有/mnt/c这个目录。
  • 在Windows的文件浏览器你找不到/bin/目录, 但在sdk的bash终端中可以看到, 它实际上就是/usr/bin/.

另外, 你还需能够辨析:

  • /mingw32//mingw64/两个目录包含了 MinGW(Minimal GNU for Windows)环境,用于提供一套完整的 GNU 工具链和运行时库,以便在 Windows(32)和Windows(64)上编译和运行原本为 Unix 设计的软件。

  • sdk里有多个python.exe解释器:

    • git-sdk-64\usr\bin\python.exe: 位于 Unix 仿真环境中;
    • git-sdk-64\mingw64\bin\python.exe: 位于 MinGW 环境中; 更倾向于兼容 Windows 的路径格式和依赖项配置,通常在处理 Windows 应用和开发工具时更加可靠。

    VScode中指定usr\bin\下的python作为解释器时会报错.

    建议将/mingw64/bin/添加到环境变量中, 即在C:\Users\<user_name>\.bashrc中添加export PATH=$PATH:/mingw64/bin/

    建议将mingw64下的python作为唯一python使用.

SDK下终端的美化

  1. 在git-sdk的仿Linux环境中安装zsh, 其路径是sdk/usr/bin/zsh.exe
  2. 并安装oh-my-zsh, 可参考

注意: 由于包管理工具不同于Ubuntu,上面的步骤中,要把所有命令中涉及到的apt install改为pacman -S

有意思的BUG: 像是关于zsh的兼容性问题

在执行sdk中的zsh时, 我出现了系统的进程会卡在git.exe上,并伴随cpu的大量消耗的情况, 具体为:

  • ❎ 进入sdk/git-bash.exe独立窗口,执行zsh时, 会卡住。
  • ❎ 进入sdk/usr/bin/bash.exe独立窗口,执行zsh时, 会卡住。
  • ✅ 把上述bash.exe集成到win11的终端软件, 打开bash.exe对应的终端执行zsh时, 是正常的。
    • ❎ 但在zsh里执行cd /d/, 即进入非系统盘时, 又会卡住。
  • ✅ 在win11终端软件的cmd中执行zsh时, 是正常的.
    • ❎ 但同上, 无法进入非系统盘.
  • ✅ 把bash.exe集成到VScode的终端执行zsh时, 是正常的。
    • ✅ 进入非系统盘, 依然正常。

SDK的终端集成到win11和VScode

开头已经介绍, <your_sdk_path>/usr/bin/bash.exe才能被集成。完整步骤如下:

  1. 配置好bash

    在C:\Users\user_name\.bashrc中添加下述内容(若没有该文件则新建)
    # 增添环境变量,使得bash能够使用和git-bash一样多的命令和工具
    export PATH="/usr/bin:$PATH"
    # 增添一些命令别名
    . /etc/profile.d/aliases.sh
    # ... (其他)
  2. 集成到win11的Windows Terminal
    打开Windows Terminal→ 下拉菜单→ 设置→ 打开JSON文件→ 在profiles.list中添加一个字典:

    {
    "commandline": "D:\\my_apps\\for_produce\\git-sdk-64\\usr\\bin\\bash.exe",
    "guid": "{47a208f8-6d71-db8e-6ab8-2203b0ee0fc2}", // 如果报错,可在网上搜一个guid生成器
    "hidden": false,
    "icon": "D:\\my_apps\\for_produce\\git-sdk-64\\mingw64.ico",
    "name": "git-zsh"
    },
  3. 集成到VScode
    打开VScode→ 设置→ 打开JSON文件, 配置如下:

    "terminal.integrated.profiles.windows": {
    "PowerShell": {},
    "Command Prompt": {},
    "Git zsh": {
    "path": ["D:\\my_apps\\for_produce\\git-sdk-64\\usr\\bin\\bash.exe"],
    "args": [],
    "icon": "terminal-bash"
    }
    },
    "terminal.integrated.defaultProfile.windows": "Git zsh",

SDK的环境里安装python包管理工具(可选)

请转到这里, 有详细教程.

相关命令和功能扩展

命令

Git sdk基于MSYS2。MSYS2和MSYS1相比,引进了包管理器msys。

更多参考The difference between MINGW and MSYS2

pacman相当于Ubuntu中的apt,你可以用它来管理你在这个拟Linux环境中的软件包,包括安装zsh、wget等。

pacman -S <package-name>  #安装软件包, 如`wget, perl`等  
pacman -Sy # 可以确保软件包最新。
pacman -Syu # 将所有软件包升级到最新。
pacman -R <package-name> # 删除软件包
pacman -Q # 列举软件包
pacman -Ql <package-name> # 查询软件包内容
pacman -Qo <file-name> # 查询文件所属的软件包

功能扩展

git-sudo

TODO: 为git bash添加 sudo 命令

pacman仓库

Git for windows有三个相关的pacman仓库

Git for windows相关文档

参考、引用、致谢

在 Windows 10 中使用 zsh 作为默认终端 - 七海の参考書 (shiraha.cn)
Windows Terminal美化(oh-my-posh3) - 知乎 (zhihu.com)
Git for Windows的编译环境 | Marvin’s Blog【程式人生】 (marvinsblog.net)


Static Badge Static Badge Static Badge Static Badge
Copyright © 2023-2024 Raymond H., All Rights Reserved.