I use Git. I use Mercurial, sometimes, but I use Git. I used to find it hard going (actually, I still find it hard going, but it’s a lot easier now). I used to find it frustrating that you
pull from origin/master, but
push to origin master; and how the documentation talks of things like refspecs, HEAD, and ORIGIN_HEAD.
Really; you don’t want to wade through stuff like that when you’re trying to fix a merge, or push to a colleague’s repository. You just want to get stuff done. I imagine Matt Gemmell pulling his hair out when using it.
A while ago I read a piece by Neal Stephenson where he described Unix as the “Hole Hawg” of operating systems. (It’s a short piece, go read it). I think of Git as the Unix, and Mercurial as the Mac of version control. It’s complicated and can really mess you up but there is a lot of power there and for the times that you need it; you’ll be glad of it. Most of the time a quick Google search is enough to answer questions.
There is more than one way of using Git. If you look at some of the comments on here you’ll see that my approach isn’t necessarily shared. I welcome these comments. I’ve learned from them and I’m grateful that someone took the time to share their views. If I don’t reply it isn’t out of churlishness; rather that I have nothing to add. I’m sure that there will be many more over the year.
My intention with this site is to set up a resource of quick answers along with longer explanatory posts and add to the list of Googleable resources. It’s also a way of pushing myself to learn more about Git as I write them. It isn’t to push a “One True Way”. But with a little thought and understanding using Git isn’t that difficult. Yes, it can be dangerous to rewrite history. Yes you can lose your work if you delete a branch. Yes you can mess up XML files with a merge. But these risks can be minimised with a few simple rules. If you can figure out the memory management rules in Cocoa, you can work with Git (and even if you can’t you can). And with a little knowledge and confidence you can develop your own, consistent, Git workflow.
But, for the love of whatever you hold holy; don’t just use it as you would Subversion