"Git is just too hard"

A warning sign that you might suck.

"Git FFUU"

Here's the sentiment that's been delivered to me on several occasions by people that don't know any better:

"Git is too hard, and Subversion is good enough."

It kills me when I hear this. This is the verbal equivalent of wearing a hat with "Idiot" bejeweled on the front using neon Lite-Brite pegs. There's a 99% chance that the person saying this has either never used git, or has used it once on someone else's project and they spent zero effort trying to understand it.

Fact #1: Basic Git usage is easy

Let's dispense with the "Git is too hard" complaint. As I write this, Github's home page says that they have 155,000 coders using their service. Even if a significant portion of that number is virtual/duplicate accounts, or people signed up to Github despite loathing Git, you still have a huge mass of developers that apparently don't think Git is too hard. That's just counting Git users on Github. If they can figure Git out, you probably can too.

That's my argumentum ad numerum: one hundred thousand developers can't be wrong! But I don't like it when people use logical fallacies on me, so I won't use them on you.

How might we objectively prove that Git is, in fact, not "too hard" when compared to Subversion? Cold hard concrete example, I guess.

Go look at the Git-SVN Crash Course, where you'll see examples of equivalent commands in Subversion and Git. In many cases, the commands are nearly identical. Consider the typical workflow:

Using Subversion:

  # get the code
  svn checkout http://whatever
  # ... make some changes, then commit them ...
  svn commit

Using Git:

  # get the code
  git clone git://whatever
  # ... make some changes, then commit them ...
  git commit -a
  # optionally share your commits
  git push

That's the basic retrieve-edit-commit cycle that you do in either Subversion or Git 90% of the time. Your first hint that something is different is with the git push command. At this point your crappy instincts are taking over and you are thinking to yourself:

"See? That proves my point! I don't have to type that extra command with Subversion, therefore I am right and I'm going to get a cookie for myself. Nom nom nom. I am smart. S-M-R-T. Smart."

Stop it, you're embarrassing yourself (again). One of the key features of Git is that you can do things to commits before you share them. That concept probably makes no sense to you, which should be a clue to you that you might be missing out on something powerful. And those powerful features of Git are the ones that you don't have to understand right away. The stash, the index, rebasing, forking and adding different remotes - these are all things that you don't need to understand on your first day. You can do your basic Subversion-style work flow easily with Git, and learn the advanced stuff as you go; just like everything else you've ever learned.

Fact #2: Once you understand Git, Subversion is obsolete

Subversion is only "good enough" until you learn Git. It's true. I can't think of any situation where I'd choose to use Subversion over Git. Git can do everything Subversion can do (and better), but not vice versa. Working with Subversion feels utterly primitive after using Git, and I'm definitely not the only one that thinks so. In fact, git-svn was created so that Git users stuck on a project using Subversion wouldn't have to live without the glorious features that Git provides.

Git is a better tool for the job, and a craftsman should use the best tools available.

Make the switch.

Resources

After you've decided to release your death grip on the past, you'll have questions. Here's some resources that I've found to be most helpful:

Posted on 14 Dec 2009 by Jim Garvin

blog comments powered by Disqus