I suppose it's more than a slight bit incorrect to state that these are my first thoughts on git; I've certainly already been exposed to git in a variety of ways. I'd always been told that my love of graph theory would convert me over to this different type of version control.
I more or less decided to look into git on a set of whims, yet I was really persuaded to go to the "dark side" because I was strongly encouraged (read: required) to understand the back-end model instead of just memorize a handful of commands (like with SVN). I'd attempt to do the merits of the consequences of git's back-end model justice, but instead, I'll point you to a far more experienced git user's blog post.
My first steps to really learning git was to look at a handful of resources:
- Git for Computer Scientists: an excellent introduction if you already understand directed acyclic graphs (DAGs),
- Understanding Git Conceptually: a good introduction which requires less prior understanding of DAGs,
- A Visual Git Reference: a good way to solidify your knowledge of git once you've already gained some understanding from an introduction piece,
- Git in pictures: a nice post to read once you feel somewhat comfortable with git, and
- git's man page: actually, this is a really confusing reference unless you are already familiar with git and just want to see what a specific command does.
After an hour or so of reading, my friend Evan and I talked through a bunch of the basic commands briefly and some of the more interesting commands in greater depth. I took notes on easel paper for the basic commands, and we worked through diagrams for
I got fairly excited when I guessed that
rebase essentially applies a series of
cherry-pick calls to a branch.
I decided to use my first git repository for a documentation project I'm working on for MIT's academic computing environment, which is publicly available on github. That repository hasn't seen as much activity as I'd like yet, but I have also been using git much more frequently for my academic projects.
I really like the control that my understanding of the back-end model provides, and that control in and of itself is a sufficient reason to consider switching to git. I'll also argue that learning the back-end model is a fun enough exercise to want to switch.
I apparently have a knack for coming up with nerdy party games. Three Fridays ago, my 6.033 TA encouraged us to practice creating diagrams for our design project proposals by trying to identify UNIX commands or filesystem structures from our partner's drawings. He claims that this "6.033 pictionary" was a result of strong nudging of the course's writing staff. Given that I had been encouraged by some of my friends to learn git earlier that day, naturally, I merged the two ideas and decided that gitionary needed to be created. I told Nelson, who is quite fluent in the ways of git, and he generated the game cards so we could actually play with the idea.
The original premise was simple: draw the appropriate directed acyclic graph corresponding to git commands so that your friends could guess it. However, many people who would likely end up playing the game did not yet know git, myself included, so we thought it would be good to allow drawing non-DAGs, too.
Nelson generated a set of gitionary cards, and we test ran the game with a rotating "artist" and the rest of the room guessing. I can't post pictures and comments about all twenty-six commands drawn that night, so I'll just show you a few (semi-arbitrarily selected) highlights. Many of the most successful were not drawn as directed acyclic graphs, such as
git-stash turned out to be difficult when initially drawn in a way that reflected what the command did, and more surprisingly still took about half a minute after the lower left-hand corner of the sheet was sketched:
A somewhat hilarious failure mode of gitionary is that objects which would ordinarily be drawn as a combination of circles and lines inadvertently look like DAGs. This was a problem Jeff had while he was drawing a magnifying glass to represent
You are welcome to examine the full set of drawings from the first run of gitionary. I definitely encourage you to get a group of your favorite nerdy friends together to play the game, and maybe, you will do more than one of the plumbing commands.
Now that I've created a party game about gitionary, I think I should probably go spend some time learning git. Word on the street is that I'll think the back-end model is "cute."