Over the summer, I had the fortune of being given an opportunity to work on JGit. Like most, I did not what that was, but figured it was something related to git. I had not used git seriously before, but was never too eager to try it out either. I had heard similar tumult behind RoR and Ubuntu, which I had used and liked, but didn’t find the hype lived up to the mark. I imagined the same would be true for Git.
This was not true, Git turned out be different. In fact, after learning(***) git, I can’t imagine why it isn’t being used more widely. Many projects are migrating to it right now, but there are still far too many sceptics out there. It took Google Code, for example, two years of asking to add git as an SCM option.
Anyway, with all said and done, I fell in love with git, not just because of the functionality it provides me with, but also because of the way it allows any given project to flourish,and the philosophy it brings with it.
So what’s JGit got to do with all this? Git (or CGit (cause it’s written in C)), is released under GPLv2. While this is perfectly fine for git itself, other projects that stem off it and need to be under other licenses, cannot reuse it. Particularly, the Eclipse folks who wanted to created EGit (the Eclipse plugin for Git) found it necessary to have another version of it.
So in 2009, along came JGit, a Java implementation of Git released under EDL (a BSD style license). JGit still provides only a small subset of the functionality of CGit, but is slowly getting there. Hope is, it will be able to reproduce git plumbing as well as porcelain, which is the current focus.
Over the summer, while interning at Red Hat, I worked on JGit and EGit Clean Command, and Stash Command (create, list, apply). I still have a bit of work to do on the latter, and that’s what I’m going to continue working on over the next two months.
I get to delve into git internals while working on this stuff and often find really cool things. I’ll post some of this here.
Here are some good sources for more info on JGit:
*** this is to be taken with a grain of salt. Every time I think I have git figured out, it proves me wrong.