Monday, April 29, 2013

Compiling Git on Cygwin

First off, if you aren't using Git for your version control needs, you should be. Well alright, that's a little strong -- but if you're still using a non-DVCS (aka centralized) source control system then check it out. Seriously.

Now, on to the main topic of this post. I'm currently doing as much as possible from the Cygwin environment, and so naturally I have installed the Git package and use that instead of the more common (and perfectly usable, BTW) msysGit project. Unfortunately the currently shipping Cygwin version of Git is 1.7.9. That's a few releases old, and it bit me a little when I was Googling to figure out how to set the upstream URL for an existing remote. (The syntax for that command has changed a few times.)

So I thought I'd have a go at compiling the latest sources for Git. It turned out to be quite easy, but if you follow the "recipe" here it might save you a bit of Googling:
  1. Run the Cygwin setup utility and ensure you have the following packages installed:
    • gcc
    • autoconf
    • curl
    • libcurl-devel, required for http/https support (NOTE: this is an obsolete package, you will need to uncheck "Hide obsolete packages" when selecting packages to install)
    • make
    • libiconv
    • python
    • perl
    • gettext
    • gettext-devel
    • you may need libiconv-devel and cygwin32-liviconv (see Marek's comment)
  2. Get the source. Either download a zip archive or clone the Git sources with git clone using some other version of Git. A couple of notes on that with respect to Git configuration if you do this:
    1.  Before you clone, make sure your Git config has core.autocrlf=false, otherwise you'll end up with DOS style line endings that cause the build to break.
    2. I also had a screwy http.sslcainfo property value; either unset it or point it to /usr/ssl/certs/ca-bundle.crt.
  3. From your newly cloned git repo, run the following commands:
  4. make configure
    make install
You should be able to run git --version and see something more recent than 1.7.9. (I had to open a new Cygwin console before this exact command worked, but I could run /usr/local/bin/git.exe --version.)

That's all there is to it (see, I told you it was easy). You're now running the latest version of Git. Thanks to all the folks who work on both Cygwin and Git for making this so easy.