2008-07-17

First impressions of Git

Neil Schemenauer has set up a read-only Git mirror of Python's svn repository. I decided to give it a try by using a Git branch for the removal of the sunaudio module. Damn did I have to get a lot of packages to build the documentation. It was pretty ridiculous how much of a hassle it was to get Git installed under OS X in a directory of my choosing. MacPorts didn't work thanks to a segfault being triggered by some Perl package and APR. And then the binary packages only install in a single location. So I did it by hand, but it took a lot of compile-find_missing_package-repeat work to get everything built, even when the configure script checked for things! The build process and the dependencies could definitely use some work.

I think everyone knows that Git is very fast and I agree with that. Doing the initial checkout, local branching, local checkins, diffs, etc. were all very fast. I only had one performance issue where I ran ``git-svn show-ignore`` and it did some indexing thing that took a couple of seconds.

One thing that did throw me is the difference between a clone and a branch. Turns out that a branch is done in-place, while a clone makes a new copy. I am used to using a "cloning" approach to development where I have multiple checkouts, but I decided to try "branching" instead. Once I learned that ``svn branch`` lists your branches and ``svn checkout`` switches in-place, I was good to go.

I did my work, ignoring the fact that a bunch of files were being listed as untracked (I will create a .gitignore file another time). I actually forgot I was working under git, so I didn't do a bunch of small commits, just one big one for my work.

And that is when Git's way of things threw me a little. I wanted to diff between commits, but those commit numbers are really long. I figured out I can diff against the master branch by specifying the branch name, but how do you diff against a specific commit version?

I also wanted to commit from Git to svn, but when I ran the command a ton of output came spewing out from my terminal. I didn't like that so I killed the process. When I ran ``git-svn show-ignore`` I realized the output was rebuilding something. Having an actual ``git gc`` command still strikes me as odd. But I still don't know how to tell what ``git svn dcommit`` is actually going to push to the server. Plus I don't know how to diff between specific commits without pasting in those huge commit numbers. I guess there are no simple, symbolic commit names?

Anyway, Git seems very powerful, but still slightly quirky. I am going to reserve judgment until I have had a chance to push changes to svn and used it some more. I also need to see if I can get svn 1.5 working for me again (the build from MacPorts keeps crapping out on me) so I can try the bzr-svn plug-in and have both DVCSs on more equal footing.