My interest in version control arises in no small part from the years of using informal systems and loose in house standards for managing documents for architectural projects. If it was just the case that every office archived their projects differently, the world would be a better place. It would be better even if each individual did so, but the delta between the number of architectural projects and the number of ways in which they are archived and managed is rather small…at best. Some projects have different methods for each type of document, and sometimes these are changed with a project’s phase.
As I started to get more serious about learning to program, I started using version control out of three motivations: for access to code from both laptop and desktop; as a way to backup my work; and because of my interest in the general problem. What I have found is that using version control not only solves the technical issues and resolves my curiosity, it also structures my thinking as I develop projects. The implicit symmetry between the local and remote repositories is something worth seeking [Perlis, Epigram 6].
I have a free account on Github and use the Windows app. The interface has a Metro look, but it’s not a Metro app. The downside of Github is that all free account repositories on Github are public, and I have a use case, coursework for Coursera classes, that make public repositories inappropriate.
For that I have a free account on Bitbucket because it allows private repositories. I access that using Atlassian’s free version of SourceTree. What I like about SourceTree is that it exposes more of the guts of version control. If command line Git is C, it’s Java, and the Github app is…well, it’s an app.
The mention of the command line is not accidental. Once I start wanting to do something a little advanced, the step by step descriptions for implementation will invariably use the command line because at it’s core Git is not an app; it is a system with a command language, and the command language maps directly onto Gits underlying concepts in a specific way versus the generic language of click here, select that, type this, click there…etc. of app usage.
As a twenty odd year user of Windows, it feels very unnatural to say this, but learning the command line is something to be embraced. Then again Emacs feels unnatural from that perspective too.
My thanks to Eric Sink for the free! [hard!] copy of his book Version Control by Example which he graciously provided as an “Offer HN:” a couple of years ago. It provides consistent examples which cover the general issues across different types of version control systems. When I finally got around to using version control, I reread it more thoroughly than when I was merely interested in the topic.
Amazon Affiliate Link to Eric’s book.
Non-Affiliate Link to Eric’s book.