原文链接已失效。我在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 官网,点击如图按钮下载
step2-在git中配置代理
由于SDK所在的仓库在国外,所以需要设置代理。
|
step3-下载安装器
去Git for Windows 官网,拉到最下面可以看到 Git SDK 的下载:
点击进入,选择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.msys
、mirrorlist.mingw64
和 mirrorlist.mingw32
;我们可以直接在 Windows 中使用文本编辑器修改它们为国内源:
|
|
|
注意服务器的顺序,将国内服务器放在优先的位置才能保证 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
的世界.
<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下终端的美化
- 在git-sdk的仿Linux环境中安装
zsh
, 其路径是sdk/usr/bin/zsh.exe
。 - 并安装
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
才能被集成。完整步骤如下:
配置好bash
在C:\Users\user_name\.bashrc中添加下述内容(若没有该文件则新建) # 增添环境变量,使得bash能够使用和git-bash一样多的命令和工具
export PATH="/usr/bin:$PATH"
# 增添一些命令别名
. /etc/profile.d/aliases.sh
# ... (其他)集成到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"
},集成到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。
pacman相当于Ubuntu中的apt
,你可以用它来管理你在这个拟Linux
环境中的软件包,包括安装zsh、wget等。
|
功能扩展
git-sudo
TODO: 为git bash添加 sudo 命令
pacman仓库
Git for windows有三个相关的pacman仓库
- https://github.com/git-for-windows/build-extra
- https://github.com/git-for-windows/MINGW-packages
- https://github.com/git-for-windows/MSYS2-packages
Git for windows相关文档
参考、引用、致谢
在 Windows 10 中使用 zsh 作为默认终端 - 七海の参考書 (shiraha.cn)
Windows Terminal美化(oh-my-posh3) - 知乎 (zhihu.com)
Git for Windows的编译环境 | Marvin’s Blog【程式人生】 (marvinsblog.net)