One of the key tools of a software project development is the repository where it’s hosted. During my experience as software developer I have been working with several flavors, such as Visual SourceSafe, CVS, Mercurial, and of course, SVN. But latetly I have found this little jewel called Git.

Git was initially developed by Linus Torvalds as a result of an unsuccessful research to replace the propietary SCM BitKeeper, used back in 2005 in the Linux Kernel project (kinda strange that the opensource star project was hosted with a propietary software, huh?). Back then, the ability to freely use BitKeeper was withdrawn by its copyright holder, so Linus was forced to find a replacement for it. He was looking for a VCS with a high performance in the process of applying patches and keeping track of the changes, but he didn’t find any opensource solutions that fitted his requirements, so he started the developement of Git (as he says on Git’s Wikipedia entry, Git was named after himself, because he considers himself an “egoistical bastard, and I name all my projects after myself”; git is the British English slang word for an stupid or unpleasant person).

That’s why its main characteristics are oriented to help the development and management of a huge, distributed and collaborative project like the Linux Kernel. These are the most noticeable of them:

  • Strong support for non-linear development
  • Distributed development
  • Efficient handling of large projects
  • Cryptographic authentication of history

But for me, the most shocking one is its decentralized structure in distributed development: there is no need for a central repository where all commits are sent by the people working in the project (but still, it is recommended to use a main branch for that purpose).

In following posts I will explain how to use Git in the lifecycle of a software project and how can it improve our performance.