Git Is So Terrible It Is Awesome

Today's SysAdvent is hilarious:

14 Tips For Git Giddiness In 2014

It's hilarious because it basically boils down to git is so awesome that it can commit every sin that would get any other piece of software summarily canned and you'll keep coming back for more.

It features such pearls of wisdom as:

  • You'll be glad you stopped relying on default command arguments, especially when they change in a major release.
  • Previous version control systems would add conflict markers in the file and make you resolve them, but without operating against the repository. (and here's how to make Git work the same way.)
  • Do Not Store Artifacts in Git (Even Lil' Ones)
  • Submodules are Horrible... Except When They're Not
  • One of Git's most useful features is the ability to add commands to its lexicon, via the alias feature. Learn to love this feature: it allows you to create shortcut commands for complex operations.

That one is my favorite -- after telling you to avoid default behavior because it will break in future revs, the author tells you to create your own defaults, which will break in future revs because the pieces they depend on will break. Plus it will mean that not only do you need a particular version of git to work the way you want, you'll need a whole environment.

  • Be Careful What You Read On the Internet

That one is good advice. One could even apply it to both this and the linked article.

  • The attitude that everyone must obsess over the intricacies of a single counter-intuitive tool required to get work done does nothing to help Git's adoption.

One might argue that Git being a counter-intuitive tool is a bigger hurdle preventing Git's adoption.

  • Your Team Needs a Git "Language Lawyer"


  • Make Time Early On to Discuss and Decide on Workflows

I describe this as "the wiki problem". Because there's no structure imposed on people, people can do what they think they want. Which is liberating. But the problem is that if you have more than one person using the tool -- and sometimes not even that many -- the conflicting ideas of workflow (or structure, in wiki terms) turns the whole thing into an inconsistent mess, one that only increases exponentially in complexity and depth as more people are added.

In summary: Git Is So Awesome It'll Make You Want To Kill Somebody.

The bottom line to all this is that version control is hard, even though we've been doing it for ever -- sccs dates back to 1972, which is before most of the kids today can remember.  Of course, these kids "discovered" version control with git, so they think they invented it and that it is all new.  Us old fossils know better.

And the best part -- we can watch the same thing happen to these kids.