如何最小化 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 程序员期望可用的实用程序的数量——例如 如 sedawk 等(不是 "just because" 但因为它们确实 Git 代码的某些部分使用)。

    • git svn桥是用Perl写的,需要几个Perl 模块以及客户端 Subversion 库。

      虽然不是核心组件,但很多人认为它的存在 理所当然,所以就在这里。

    • 常用的 GUI 实用程序,git guigitk 写在 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。