It all started when I caught Tech Talk: Linus Torvalds on git on reddit. This was a very interesting talk for many reasons:
- I wasn’t too familiar with Linus Torvalds—what a guy!
- it had very strong opinions—I like those
- it covered distributed source control
Source control isn’t something I learned in school. However, by the last year of university, we had to collaborate on enough projects to realize that a way to share source code was an absolute must. Unfortunately, my first exposure to source control was CVS.
I would like to say that CVS is better than nothing, but Linus would disagree with me. CVS taught me the basics of source control and it changed the way I work. Later on, I switched to SVN which was basically a CVS upgrade—a CVS with a lot of little annoyances removed.
For a lot of people, including me until the above video, the CVS/SVN view of source control is their complete exposure to source control. This sad perspective is akin to the one of people who think that Java programming is all there is to programming.
The video hinted to “life after CVS/SVN”. Linus didn’t go into much details, but I figured that if someone, anyone, had a right to an opinion, he would be a good candidate. I installed GIT and started reading the tutorials.
I started getting interested in Ruby on Rails after I watched their famous screencast and wondered: “so, what’s the catch!?”. Learning GIT happened much in the same way. And with similar results.
GIT changes your view of source control. Because of its decentralized nature, a lot of administration bureaucracy disappears. Have you ever asked yourself the following questions?
- Where will the repository be hosted?
- What kind of access will we give? (uh… HTTP, SSH, NFS?!)
- How will we manage the user accounts?
- What will be our branch naming conventions?
- Who gets write access? Under what conditions?
- What kind of branching scheme should we adopt?
- Who will merge the branches?
- When will merge occur?
- How is the repository going to be backed up?
- What happens to our remote users? (in the case of multiple sites)
What if I told you that all these problems can go away? What if all these problems are caused by the same set of assumptions?
Distributed source control is a radical shift.
I tried GIT and then I decided on Mercurial, another distributed source control system. Both systems have pros and cons, but Mercurial felt easier to use and had better documentation.
My decision on Mercurial doesn’t have to be a final one. I fully intend to revisit GIT in the near future. There are some of its features that I miss and the fact that I’ve been working with Mercurial for a month now makes me more familiar to the underlying concepts.