Good Development Practices: part 3 - version control continued
Disclaimer: I'm only commenting on migration from subversion to git, as I found the git tool chain to provide you with a paradise of tools to use, once you get to know them, which also happens to make a developer a happy developer. Bazaar is right out there with the rest of the DVCS's but my GPS points to git as a primary weapon.
Some time has passed since I tried git for the first time, and since slowly getting the bigger picture, I just have to mention a couple of things.
As I recall, it was not a speedy process to learn subversion. It took a couple of months to be exact, the main reason for that being that I did not use and have any knowledge of VCS back then.
Subversion can't really be bad-mouthed since it does what it needs to do. Sure, it has pains and issues that one comes across from time to time, but besides that, it's OK for basic usage. The main issues I came across are checksum mismatch, unversioned directory already exists and resolving conflicts. Oh, and the biggest pain I have with subversion is how it pollutes your entire project structure with hidden ".svn" directories. Recently we struggled with permission errors and I'm certain all this hidden directories contributed to the abuse.
Along came git, after several attempts. The first few tries did not prove to be that awesome, due to the steep learning curve. My complains on git's learning curve is short-lived as I really found a home with it. My steps were roughly something like this:
- OMW! What is this?
- I don't understand
- Save me from killing myself!
- halp. I'z not gitting it
- Ok, let's try again
- Aah. hmm. huh? Aha!
The birth pains. Then things come together as you learn how everything starts to fall in place and you play with the git-svn bridge. then it's a case of:
- hmm, this is actually nice :)
- the whut what?! @#$%^^$@! I broke something.
- ok, so that's how not to break it...
And then by repetition one's understanding and use of git improve. But just by using it you won't get anywhere as well. My journey took me all over the place, google, youtube, github, gitbook, webcasts, cheat-sheets, presentations, whatever I could lay my hands on. In the end, my time was not wasted. It was a great investment in learning a great tool that is made for the job of coding.
I had an actual eureka moment while watching an O'Reilly webcast on Youtube, O'Reilly Webcast: The Fringes of Git where they went beyond the basics of Hello World! in git. I realised that once you get over the first mountain in the learning curve, there's hope. Git is not just another DVCS that tries to be completely different, it's a DVCS that makes your life a breeze! It really is a Swiss Army knife! - Fast, as you don't need the network every time you need to do a commit and or branching. Git grep is magnitudes faster than conventional grep in the terminal, since it uses the indexed information to search for your query. Secure since it uses sha1 hashes to ID your commits and you can sign off on a commit using your GPG key. You can travel though time using reflog, which you use to show the journal of all your past git actions. Informative because you have access to the project's entire commit history, without the need to fetch data from a server.
I know this is not much, but I'm still exploring. What I've listed here is the parts that grabbed my attention and showed me why git is really that awesome.