This week in February, many people celebrate their love toward another person; I quietly celebrated a one-year mile-marker with a partner with whom I’ve had a love-hate relationship.
When I joined github a year ago, I just didn’t git it. If you look at my commit history for 2014, I committed on three days in February, followed by a commit in… June. When my instructor introduced me to git, it took a long time to set up and even longer to use. It seemed like wasted effort and needless complication.
But this didn’t surprise me. The ultimate DIY-ers, developers tend to do things the hard way just for the sake of controlling every step of the process. If chefs acted like developers, they wouldn’t order any ingredients at all, instead painstakingly adding each molecule of their sauce under the microscope until it had the desired consistency. Mad scientist to the max.
This need for control is why developers get obsessed with details, like the whole “build your computer yourself” movement, or “use linux instead of a pre-fab-OS.” In fact, if developers had their way, computer users would have to complete the electrical circuit necessary to run our computers with their left hands, while typing 1’s and 0’s on our two-key keyboard with the right.
Git seemed like one more example of their distorted priorities. Every single task required several commands with dashes and dots and asterisks, all of which I had to look up. This compared to just hitting CMD-S in Sublime and calling it a day. Why did I need to upload my code to the internet constantly when I could back it up just fine using my computer and collaborate over dropbox? Then, there was writing commands from memory in the Terminal, basically regressing to the MS Dos of my childhood (something I thought we graduated from in … 1993?)
Once I started using git on a regular basis in July 2014, it was due to prompting. I was inspired by a post from John Resig talking about his resolution to commit a little bit to his personal projects every day, just to keep his momentum and learning going. I also wanted to fill in some of the pretty green boxes in my commit history. So I jumped in head-first to the tangled web woven by the git-opus, or whatever that thing is supposed to be. There were a lot of bumps in the road, with –hard resets, repo remote adds, and merge conflict hell becoming part of my regular day.
But I kept going, trying to commit every day when possible. I snuck a few minutes whenever I could — during my beach vacation (COMMIT!), on the Saturday LIRR (COMMIT!), waking up with an algorithm at 5 in the morning (COMMIT!).
All I can say is that after a while, it started to feel like a game. Getting myself into jams, getting myself out, committing. Git became a rewarding — if occasionally very sticky — part of my problem-solving workflow.
I can’t defend the complexity of Git. I don’t know why we need 50+ command variations for a simple git log, or why there are pages and pages and pages of explanation just for that one command. It’s great. It’s ridiculous. Git has everything I could possibly dream of, yet practically speaking, very few things I will use on a regular basis.
Welcome to the open-source world, I guess. My utopia. My hell.