Git默认是为Linux设计,在Windows上编译的话,需要一个类Linux环境。 Git for Windows是一个提供此环境的项目,其Github主页是:https://github.com/git-for-windows/git
生成安装包
Technical overview解释了什么是Git for Windows,以及怎么操作它。 简单地说,它是一个基于MSYS的类Linux运行环境。在这个环境里面可以编译Git源代码,然后打包生成的二进制文件。
首先是下载它的SDK。到Download Git for Windows SDK页面,
当前64位的最新版是git-sdk-installer-1.0.8-64.7z.exe,下载以后安装,默认的安装路径是C:\git-sdk-64
。
完成之后在桌面会有一个Git SDK 64-bit
的快捷方式。
通过Git SDK 64-bit
可以进入一个Git Bash窗口。在其中可以使用命令sdk init git
从https://github.com/git-for-windows/git
下载git源代码。
git代码会放在/usr/src/git
,可以通过sdk cd git
进入。
有一个一次性的操作需要做一下:
cd /usr/src/build-extra
git fetch
git checkout main
执行操作:./portable/release.sh v2.35.1.windows.2-test
,
则在用户目录下生成PortableGit-v2.35.1.windows.2-test-64-bit.7z.exe。
生成的7z档案文件支持命令行,比如:
.\PortableGit-2.11.0-64-bit.7z.exe -y -gm2 -InstallPath="C:\\use\\double\\backslashes"
。 可参考Zip Archives extracting the released archives
编译Git
根据Building Git,
在SDK的Shell中执行cd /usr/src/git
,然后检出一个分支,比如git checkout 2.35.1.windows.2
,
然后执行make test
。
如果要获取编译测试的统计信息,则执行:
cd /usr/src/git/t
/usr/bin/time prove -j 5 --state=failed,save ./t[0-9]*.sh
更新SDK
更新SDK需要关掉所有的GitBash窗口,以防有文件被锁住。
需要启动Windows的cmd来更新,然后进入C:\git-sdk-64\
。
然后在此cmd窗口中执行update-via-pacman.bat
。
不管有没有更新,每次总会重装git-extra
。
也可以直接在文件浏览器中双击运行update-via-pacman.bat
来完成更新。
还可以调用pacman -Syu
来更新。过程中可能需要关掉重开git-bash,也许需要多次执行pacman -Syu
。
核心的软件包msys2-runtime、 bash以及pacman 需要通过pacman -Syu
来一齐更新,因为这些软件在编译的时候互相依赖。
要保证他们的互相依赖是正确的。
另一可选的办法是执行执行C:\git-sdk-64\git-cmd
来弹出一个cmd窗口,在其中执行pacman -Sy --needed msys2-runtime && pacman -S --needed pacman bash
。
如果遇到某些错误无法更新,那么总是可以选择下载一个新的SDK,重新安装之。过程中,你可以选择保留旧SDK中的usr/src
,将其同步到新的SDK中。
也可以查看
git update-git-for-windows -h
。
包管理相关
Git for Windows基于MSYS2。MSYS2和MSYS1相比,引进了包管理器msys。
可以通过pacman -S <package-name>
安装软件包。-Sy
可以确保软件包最新。pacman -Syu
将所有软件包升级到最新。
建议将msys2-runtime、bash和pacman分开来,单独升级。总之有可能会遇到比较奇怪的问题。
删除软件包pacman -R <package-name>
列举软件包pacman -Q
;查询软件包内容pacman -Ql <package-name>
;查询文件所属的软件包pacman -Qo <file-name>
。
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
perl软件包不属于pacman管理。
其他
Git cannot create a file or directory with a long path
默认情况下,文件路径不能超过255个字符。
通过git config core.longpaths true
可以允许部分命令行命令接受超过255字符的文件路径。
此是Win32 API自带的问题,通过形如\\?\...
的UNC文件名可以在一定程度上避免此问题。
MinGit
MinGit is Git for Windows Applications,剥离了很多用于命令行交互的部分。
可以从https://github.com/git-for-windows/git/releases下载,比如MinGit-2.35.1.2-64-bit.zip
。
(本篇完)
2022-03-14更新
Win32API的一个旧有问题,文件路径不能太长,比如不能超过255个字节,否则就会出错。Git for Windows也受此影响,查看Git cannot create a file or directory with a long path,太长的文件名有可能导致File or path name too long
的错误。
这个问题在议疏Windows, Pathname too long (>256 chars) #52中讨论过,对应的铺改是[issue52] adding support for long path names on Windows #85。
对于用户来说,只须设置git config core.longpaths true
即可。
根据Maximum Path Length Limitation,Win10 1607引入了对长路径名的支持,但是需要通过注册表打开:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]
"LongPathsEnabled"=dword:00000001
(更新完)
2022-10-10更新
Git for Windows其实预置了下面两个命令:
- start-ssh-pageant.cmd,用于连接PuTTY的pageant
- start-ssh-agent.cmd,用于连接OpenSSH的agent。
(更新完)
2022-11-18更新
(更新完)