Git 2.8 (2016年3月) 包含了一个非常详细的提交记录,解释了msys2对于新的git-for-windows的重要性,该版本在2015年初取代了msysgit。
请参见 提交记录df5218b (2016年1月13日),作者是Johannes Schindelin (dscho
)。
(由Junio C Hamano -- gitster
--合并到提交记录116a866,2016年1月29日)
长期以来,由于Git for Windows开发人员希望让这个大的跳跃与从MSys到MSys2的必要跳跃相一致,因此Git for Windows落后于Git 2.x版本。要理解为什么这是一个如此重要的问题,需要注意到Git的许多部分不是用便携式C语言编写的,而是依赖于POSIX shell和Perl可用性。为了支持脚本,Git for Windows必须使用Bash和Perl作为最小的POSIX仿真层进行交付,并且当Git for Windows开始于2007年8月时,该开发人员决定使用MSys,这是Cygwin的精简版本。因此,该项目的原始名称是“msysGit”(这导致了很多混乱,因为很少有Windows用户知道MSys,甚至更少的人关心)。为了编译Git for Windows的C代码,也使用了MSys:它支持GNU C编译器的两个版本:一个隐式链接到POSIX仿真层,另一个则针对纯Win32 API(加入了一些方便函数)。Git for Windows的可执行文件是使用后者构建的,因此它们实际上只是Win32程序。为了区分需要POSIX仿真层的可执行文件和不需要的可执行文件,将后者称为MinGW(Windows的极小GNU),将前者称为MSys可执行文件。这种依赖于MSys也带来了一些挑战:我们对MSys运行时的一些更改(支持Git for Windows更好)未被上游接受,因此我们不得不维护自己的分支。此外,MSys运行时也没有进一步开发以支持例如UTF-8或64位,而且除了缺乏软件包管理系统之外,许多由MSys / MinGW项目提供的软件包都落后于相应的源代码版本,特别是Bash和OpenSSL。有一段时间,Git for Windows项目试图通过尝试构建这些软件包的新版本来解决这种情况,但是情况很快变得难以承受,特别是像Heartbleed漏洞这样需要迅速采取行动而与进一步开发Git for Windows无关的问题。令人高兴的是,与此同时,MSys2项目出现了,并被选择为Git for Windows 2.x的基础。就像MSys一样,MSys2是Cygwin的精简版本,但它会与Cygwin的源代码保持最新状态。因此,它已经内部支持Unicode,并且它还提供了自Git for Windows项目开始以来我们渴望的64位支持。MSys2还从Arch Linux移植了Pacman软件包管理系统,并广泛使用它。这为Linux用户从yum或apt-get到MacOSX用户从Homebrew或MacPorts再到BSD用户从Ports系统所习惯的相同便利带来了MSys2:简单的pacman -Syu将更新所有已安装的软件包到当前可用的最新版本。MSys2也非常活跃,通常每周提供多次软件包更新。要使Git的测试套件通过,仍需要两个月的努力,直到发布第一个正式的Git for Windows 2.x还需要几个月,而一些补丁仍在等待提交给各自的上游项目。但是如果没有MSys2,Git for Windows的现代化就不会发生。此提交为支持基于MSys2的Git构建奠定了基础。
在评论中,问题是在2016年1月提出的:
由于Git for Windows已经基于MSYS2,那么不依赖仿真层的二进制文件是否已经作为MSYS2软件包提供?
Ray Donnelly当时回答道:
我们还没有完全合并。不过我们正在努力。
但是madz 指出在2017年初,这个努力没有得到实现。
请参见:
问题在于我无法及时贡献改变,以便产生新的msys2-runtime。
不过这不是大问题:我将一直保持Git for Windows的分支运行。
Wiki因此现在提到(2018年):
Git for Windows为msys2-runtime创建了一些补丁,但尚未发送上游。(这已经计划过,但在问题#284中确定可能不会发生。)
这意味着您必须安装Git for Windows定制的msys2-runtime才能在MSYS2内完全使用git。
请注意,自
提交 aeb582a9(Git 2.22,2019年第二季度)以来,Git for Windows项目已开始升级过程,将基于Cygwin v3.x的MSYS2运行时版本应用到其中。
mingw
:允许使用MSYS2运行时v3.x进行构建
最近,Git for Windows项目开始升级到基于Cygwin v3.x的MSYS2运行时版本。这具有非常显著的影响,即
$(uname -r)
不再报告以"2"开头的版本,而是以"3"开头的版本。这导致我们的构建出现问题,因为
df5218b(
config.mak.uname
: support MSys2, 2016-01-13, Git v2.8.0-rc0)仅仅没有预料到
uname -r
所报告的版本依赖于底层的Cygwin版本:它期望报告的版本与"MSYS2"中的"2"匹配。因此,让我们将测试用例反转以测试任何不以"1"(对于MSys)开头的版本。即使Cygwin最终发布314.272.65536之类的版本,这也应该保护我们的未来。
Git 2.22 (Q2 2019)将针对MSYS2运行时v3.x系列的更新进行测试,以未来为导向。
请参见提交c871fbe(由Johannes Schindelin (dscho
)于2019年5月7日发布)。
(由Junio C Hamano -- gitster
--在提交b20b8fe中合并,于2019年5月19日)
t6500(mingw)
: 使用shell的Windows PID
在Git for Windows中,我们使用MSYS2 Bash,该Bash继承了Cygwin的POSIX仿真层的非标准PID模型:每个MSYS2进程都有一个常规的Windows PID,此外还有一个MSYS2 PID(对应于模拟Unix样式信号处理的阴影进程)。
随着升级到MSYS2运行时v3.x,这个阴影进程不能再通过OpenProcess()访问,因此t6500错误地认为在gc.pid中引用的进程(在这种情况下不是真正的gc进程,而是当前的shell)不存在。
让我们通过确保将Windows PID写入此测试脚本中的gc.pid来修复这个问题,以便git.exe能够理解该进程确实仍然存在。
Git 2.37.3(2022年第三季度)演示了如何使用msys2,在Windows上有条件地允许构建Python解释器。
请查看由 Johannes Schindelin (dscho
)于2022年7月29日提交的提交2f0623a, 提交7934c74, 提交49d279f。
(在2022年8月8日由Junio C Hamano -- gitster
--在提交8dfa09f中合并)
mingw
: 移除不必要的 NO_CURL
指令
作者:Johannes Schindelin
在
df5218b(“
config.mak.uname
: support MSys2”,2016年1月13日,Git v2.8.0-rc0 -
merge列在
batch #4中),我们引入了支持在基于MSYS2的新版Git for Windows v2.x构建环境中构建Git的功能。
为此,我们将非msysGit部分(针对MSys1)分成两个部分,并且与MSys1共享
NO_CURL = YesPlease
设置不同的是,我们用空值覆盖了MSYS2中的该设置,因为我们非常希望使用
libcurl构建Git for Windows。
但这是不必要的:我们以前从未设置过该变量,因此没有必要覆盖它。
让我们只需删除这个不必要的行。