The git for Windows client appears to install an entire mingw distribution onto my machine consuming over 500MB of space.
This is nearly twice as large as the installation of Gimp for Windows!
I already have cygwin, vim and all of the other utilities I need to do my job and so have no need whatsoever for yet another copy of perl, vim, etc. I just need a git client for Windows.
How can I minimise what is being installed so that I just get a git client I can use?
Two things are in play here:
Whatever tool you have used to calculate the space occupied by the GfW install did it wrong; here's why.
Due to historical reasons many "supplementary" Git executable files
are now just "alternative names" for the main executable file,
To achieve this, the installer writes the
git.exe file and then
creates a bunch of the so-called "hard links" all pointing to that
git.exe executable. This means a bunch of files named
located in the
mingw32\libexec\git-core are all mere hardlinks.
In my (somewhat dusty) GfW install, there are 116 hardlinks to
git.exe there. Multiply that by circa 3 MiB and you get a value close to 350 MiB.1
Most (trust me) of the bundled stuff you thnk is not related to GfW is in fact crucial for it to work, because:
Some bits of Git core functionality are written as shell scripts.
A good example is
git-rebase which has been re-written in C
only 2 minor Git releases ago.
Shell script implies the need to have a Windows port of a POSIX
shell; so GfW bundles
bash. It also implies the need to have a set
of utilities any Unix shell programmer expects to have available—such
awk etc (not "just because" but because they are indeed
used by some parts of Git code).
git svn bridge is written in Perl and requires several Perl
modules to be available as well as a client Subversion library.
While not a core component, many folks take its existence for granted, so it's here.
The stock GUI utilities,
git gui and
gitk are written in
Tcl/Tk,…so guess what.
And again many folks take their availability for granted (me included).
SSH client is bundled for the same reason.
The support for
HTTP[S] protocol in Git is implemented using
libcURL which depends on a bunch of stuff including OpenSSL.
Now consider that many parts of those pieces of software I enumerated have their own hard dependencies which need to be bundled as well.
So, we are basically left with two bundled pieces of software which are not strictly needed: Vim and Mintty. The opinion of the folks working on GfW is that they are expected to be available by those who prefer to work with GfW from the Git Bash window. Simply put, they are there for those who came from Unix land or switch systems back and forth between Windows and Unix-like ones (Mac OS X included).
So… If you think about this a bit more, when, say, on a typical GNU/Linux-based OS you do somehing like
apt install git git-gui gitk git-svn
you just don't give a heck about the dependencies because
This makes the installation of Git to appear as if it has almost zero dependencies which is wrong.
Windows, on the other hand,
As you can supposedly see now, the GfW developers had no other sensible way to go around implementing this product short of bundling all that stuff. After all, a typical Joe Random Developer expects to download the installer, click through it and get a fully working product as the result.
The situation is going to improve on this front a bit:
since the start of the 2.x branch, GfW strives to piggyback on the Msys2
ecosystem as much as possible, and this includes its package management
facility (based on the Windows port of
I'm not sure whether it works now but the goal was to eventually make
GfW installable piecemeal by having it available as a set of Msys2 packages.
If you want a status update on this, feel free to ask on the GfW mailing list.
To recap, if not already there, there will be two ways to get GfW on your system: via the (full) installer and via the Msys2 ecosystem and its own package manager. The latter facility will enable you to install only a minimum amount of stuff (in exchange to some overhead incurred by the package manager's bookkeeping).
1 That won't work if you have installed GfW on a filesystem which does not support hardlinks—such as FAT32.