如何最小化 Git 为 Windows 安装的内容?
How can I minimise what is installed by Git for Windows?
Windows 客户端的 git 似乎在我的机器上安装了整个 mingw 发行版,占用了超过 500MB 的 space。
这几乎是 Windows!
的 Gimp 安装的两倍
我已经有了 cygwin、vim 和我完成工作所需的所有其他实用程序,因此不再需要 perl、vim 等的另一个副本。我只是Windows.
需要一个 git 客户
我怎样才能最大限度地减少正在安装的内容,以便我只得到一个我可以使用的 git 客户端?
这里有两件事在起作用:
你用什么工具算出来的space
GfW 安装错了;这就是为什么。
由于历史原因很多"supplementary"Git个可执行文件
现在只是 "alternative names" 用于主要可执行文件 git.exe
.
为此,安装程序写入 git.exe
文件,然后
创建一堆所谓的 "hard links" 都指向那个 git.exe
可执行文件。这意味着一堆名为 git-*.exe
的文件
位于 mingw32\libexec\git-core
中的都是硬链接。
在我的(有点尘土飞扬的)GfW 安装中,有 116 个硬链接到 git.exe
。将其乘以大约 3 MiB,得到接近 350 MiB 的值。1
大多数(相信我)你认为与 GfW 无关的捆绑内容实际上对它的工作至关重要,因为:
一些 Git 核心功能被编写为 shell 脚本。
一个很好的例子是 git-rebase
,它已经用 C 重写了
之前只有 2 个次要 Git 版本。
Shell 脚本意味着需要有一个 POSIX 的 Windows 端口
shell;所以 GfW 捆绑 bash
。这也意味着需要有一套
任何 Unix shell 程序员期望可用的实用程序的数量——例如
如 sed
或 awk
等(不是 "just because" 但因为它们确实
Git 代码的某些部分使用)。
git svn
桥是用Perl写的,需要几个Perl
模块以及客户端 Subversion 库。
虽然不是核心组件,但很多人认为它的存在
理所当然,所以就在这里。
常用的 GUI 实用程序,git gui
和 gitk
写在
Tcl/Tk,...所以你猜怎么着。
许多人再次认为他们的可用性是理所当然的(包括我)。
出于同样的原因捆绑了 OpenSSH SSH
客户端。
Git中对HTTP[S]
协议的支持是使用
libcURL
这取决于一堆东西,包括 OpenSSL。
现在想想我列举的那些软件的很多部分
有自己的硬依赖,也需要捆绑。
所以,我们基本上剩下两个捆绑软件,它们是
并非严格需要:Vim 和 Mintty。
GfW 工作人员的意见是他们应该是
那些喜欢使用 GfW 的人可以从 Git Bash window 获得。
简而言之,它们是为那些来自 Unix 土地或 switch 的人准备的
系统在 Windows 和类 Unix 系统之间来回切换(包括 Mac OS X)。
所以……如果你再多考虑一下,比如说,在一个典型的
GNU/Linux-based OS 你做了类似的事情
apt install git git-gui gitk git-svn
你只是不关心依赖关系,因为
- 一切正常而且
- 你已经拥有 95% 的可能性非常高
无论如何安装依赖项(包括传递的依赖项)。
这使得 Git 的安装看起来好像几乎是零依赖关系,这是错误的。
Windows,另一方面,
- 没有包管理器。
(不,Chocolatey 和 NuGet 不是他们。)
- 尚未安装 "the dependencies" 的那 95%。
正如您现在应该看到的那样,GfW 开发人员没有其他明智的选择
绕过实施该产品而不是捆绑所有这些东西的方法。
毕竟,典型的 Joe Random 开发人员希望下载安装程序,单击它并获得一个完整的产品。
这方面的情况会有所改善:
自 2.x 分支开始以来,GfW 努力搭载 Msys2
生态系统尽可能多,这包括它的包管理
设施(基于 pacman
IIRC 的 Windows 端口)。
我不确定它是否有效现在但我的目标是最终
GfW 可通过将其作为一组 Msys2 软件包提供来逐步安装。
如果您想了解这方面的最新动态,请随时在 GfW 邮件列表中询问。
回顾一下,如果还没有的话,有两种方法可以让你的 GfW
系统:通过(完整)安装程序和通过 Msys2 生态系统及其自身
包管理器。后一种设施将使您只能安装
最少量的东西(以换取由
包管理器的簿记)。
1 如果您在不支持硬链接的文件系统上安装了 GfW,那么这将不起作用,例如 FAT32。
Windows 客户端的 git 似乎在我的机器上安装了整个 mingw 发行版,占用了超过 500MB 的 space。
这几乎是 Windows!
的 Gimp 安装的两倍我已经有了 cygwin、vim 和我完成工作所需的所有其他实用程序,因此不再需要 perl、vim 等的另一个副本。我只是Windows.
需要一个 git 客户我怎样才能最大限度地减少正在安装的内容,以便我只得到一个我可以使用的 git 客户端?
这里有两件事在起作用:
你用什么工具算出来的space GfW 安装错了;这就是为什么。
由于历史原因很多"supplementary"Git个可执行文件 现在只是 "alternative names" 用于主要可执行文件
git.exe
.为此,安装程序写入
git.exe
文件,然后 创建一堆所谓的 "hard links" 都指向那个git.exe
可执行文件。这意味着一堆名为git-*.exe
的文件 位于mingw32\libexec\git-core
中的都是硬链接。在我的(有点尘土飞扬的)GfW 安装中,有 116 个硬链接到
git.exe
。将其乘以大约 3 MiB,得到接近 350 MiB 的值。1大多数(相信我)你认为与 GfW 无关的捆绑内容实际上对它的工作至关重要,因为:
一些 Git 核心功能被编写为 shell 脚本。 一个很好的例子是
git-rebase
,它已经用 C 重写了 之前只有 2 个次要 Git 版本。Shell 脚本意味着需要有一个 POSIX 的 Windows 端口 shell;所以 GfW 捆绑
bash
。这也意味着需要有一套 任何 Unix shell 程序员期望可用的实用程序的数量——例如 如sed
或awk
等(不是 "just because" 但因为它们确实 Git 代码的某些部分使用)。git svn
桥是用Perl写的,需要几个Perl 模块以及客户端 Subversion 库。虽然不是核心组件,但很多人认为它的存在 理所当然,所以就在这里。
常用的 GUI 实用程序,
git gui
和gitk
写在 Tcl/Tk,...所以你猜怎么着。许多人再次认为他们的可用性是理所当然的(包括我)。
出于同样的原因捆绑了 OpenSSH
SSH
客户端。Git中对
HTTP[S]
协议的支持是使用libcURL
这取决于一堆东西,包括 OpenSSL。现在想想我列举的那些软件的很多部分 有自己的硬依赖,也需要捆绑。
所以,我们基本上剩下两个捆绑软件,它们是 并非严格需要:Vim 和 Mintty。 GfW 工作人员的意见是他们应该是 那些喜欢使用 GfW 的人可以从 Git Bash window 获得。 简而言之,它们是为那些来自 Unix 土地或 switch 的人准备的 系统在 Windows 和类 Unix 系统之间来回切换(包括 Mac OS X)。
所以……如果你再多考虑一下,比如说,在一个典型的 GNU/Linux-based OS 你做了类似的事情
apt install git git-gui gitk git-svn
你只是不关心依赖关系,因为
- 一切正常而且
- 你已经拥有 95% 的可能性非常高 无论如何安装依赖项(包括传递的依赖项)。
这使得 Git 的安装看起来好像几乎是零依赖关系,这是错误的。
Windows,另一方面,
- 没有包管理器。 (不,Chocolatey 和 NuGet 不是他们。)
- 尚未安装 "the dependencies" 的那 95%。
正如您现在应该看到的那样,GfW 开发人员没有其他明智的选择 绕过实施该产品而不是捆绑所有这些东西的方法。 毕竟,典型的 Joe Random 开发人员希望下载安装程序,单击它并获得一个完整的产品。
这方面的情况会有所改善:
自 2.x 分支开始以来,GfW 努力搭载 Msys2
生态系统尽可能多,这包括它的包管理
设施(基于 pacman
IIRC 的 Windows 端口)。
我不确定它是否有效现在但我的目标是最终
GfW 可通过将其作为一组 Msys2 软件包提供来逐步安装。
如果您想了解这方面的最新动态,请随时在 GfW 邮件列表中询问。
回顾一下,如果还没有的话,有两种方法可以让你的 GfW 系统:通过(完整)安装程序和通过 Msys2 生态系统及其自身 包管理器。后一种设施将使您只能安装 最少量的东西(以换取由 包管理器的簿记)。
1 如果您在不支持硬链接的文件系统上安装了 GfW,那么这将不起作用,例如 FAT32。