原文链接已失效。我在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)