When I work on projects that don’t have GitHub or Bitbucket, I really miss it. It is the little things they do that speed things along and get me access to what I need in a way that looks visually pleasing.
This is not meant to offend, but for me GitHub and Bitbucket are pretty much the same thing. BitBucket originally attracted me due to its free private repos. All the work I do is under NDA, meaning it is confidential. The code is usually owned by whoever I’m working for, so privacy really matters. In the course of my work I’ve used both GitHub and Bitbucket extensively. For my purposes I really can’t distinguish between them. Others have tried recently. It seems to come down to nuances between open source vs enterprise development. That aside, I’ll just call the pair GitHub from now on so I don’t have to repeat myself.
5-speed manual vs automatic:
The difference between a project with and without GitHub, is sort of like owning a car with a automatic transmission vs a 5 speed manual.
I used to own an old BMW 3 series with a 5-speed (technically an E30). It had 3 floor pedals, the extra being the clutch for shifting gears. That car was a blast to drive! It had a tachometer in the dash too. I remember always being impressed that in 5th gear the speedometer and the tachometer were parallel. Pretty cool design and engineering philosophy by BMW. I just loved the way it responded, even though it had 180k miles when I bought it. Yeah it was expensive to maintain, but I was infatuated.
Sadly, this is less common today, but I also learned to drive on a manual. Just after my sixteenth birthday I took my drivers test with a 5-speed Corolla. During the test I conked it out twice but still passed by one point.
That is the good and bad about the manual: it is more work, can be slower to shift and fatiguing to drive, but in the right hands, when you down shift and punch it out of a corner there is nothing like it! It does just what you expect it to do at all times.
The enjoyment of shifting gears:
When it comes source control, git command line is my sporty 5-speed manual. I use git exclusively on the command line. I know my limits (by no means am I a git guru), but I get the job done day in and day out. It brings satisfaction in the familiar routine of going through the gears (pull, commit, push and the occasional merge/rebase). Everybody I know who can switch to git already has.
I suppose SVN is now the equivalent of an old rust bucket with a 3-speed on the column without a synchro (double clutch to get back into first). Sorry SVN, you were a trusty pal back in the day.
The ease of driving an automatic:
Using GitHub on top of git is what I consider an ‘automatic’. It does a lot of nice stuff intuitively that I don’t have to work at or think about to much.
My main use of GitHub is the web interface for browsing the repo. I love being able to compare branches, look at commits, study code, go back in time, make inline comments, etc, etc. The coloring of the output is very clear as to what is new code, what was removed, and which lines were changed. I will often have a handful of GitHub tabs open at once to get caught up on recent commits. Reading code recently committed by your team members is a good habit, even if not required by management.
To that point, fixing a bug correctly (without breaking something else) almost always involves determining its origins. With GitHub it is very handy to be able to literally ‘click’ into the past and search for keywords at a certain point, and then correlate those changes to commit messages. Then you know who to take the nerf bat to.
I have tried desktop GUI tools on Ubuntu and Windows for browsing repo history. They all come up way short and remind me of Windows 3.1 programs. The command line can be used for looking at recent changes and even code archaeology, but in practice it becomes too much to wade through.
Managing pull requests in GitHub is really nice too. It will even warn you if there is a merge conflict in advance. The built in wiki’s are nice. The Readme.md markdown formatting is nice.
A project run through GitHub (or BitBucket) makes my work day easier, makes collaboration easier, and helps me feel like I’m right there with the rest of the team when I’m working remotely.
With git command line and GitHub, we get the best of both worlds. The pleasure of the 5-speed (git cli), and the convenience of the automatic (GitHub). Okay it’s not a perfect analogy…
Some alternatives for the DIY project:
Don’t want to tie yourself to GitHub or BitBucket? I don’t blame you. There are many business cases for keeping code on servers you and only you control.
These projects are web based repo browsers that work similar to GitHub:
- GitLab – https://about.gitlab.com/
- GitWeb – http://git-scm.com/book/en/v2/Git-on-the-Server-GitWeb
- Gitorious – https://gitorious.org/
- GitList – https://github.com/klaussilveira/gitlist
- Ginatra – https://github.com/narkoz/ginatra