My Subversion usage finally stabilized, but I realized that my major problem was that commits were relatively expensive (i.e., in order for me to make any commit I had to open an ssh connection to my remote server and send in my updates). Generally this is no big deal, but it made me less likely to commit on a regular basis -- especially when at home or travelling -- so I was falling back into the bad habit of making new copies of code with increasingly obtuse names (myscript.R -> myscript2.R -> myscript2-working.R, etc.). I guess I could develop my own personal file nomenclature system, but frankly, that is what version control software is for.
Earlier this year I stumbled upon an
article by Cory Doctorow in which he describes how he uses a Python script (
Flashbake) to automate the
git version control system. This led me to a
video of
Linus Torvalds preaching the Gospel of Git at the Googleplex. The chief architect of the Linux kernel is known to be fairly, um... opinionated, so I was prepared to take his comments well salted; however, I ultimately found his arguments for git compelling and decided to give git a whirl.
Git is many things to many people, but my reasons to boot svn to the curb are that I want to:
1) Make local commits often.
2) Branch at will.
3) Switch among branches easily.
4) Merge branches easily.
5) Share repos among collaborators.
For my workflow, git does all of these things better than svn. While the ability to perform local commits was the killer feature for me, I have come to appreciate branching and merging (something I generally avoided with svn due to the often disastrous outcomes). So there it is. I like Git (and not
just because
it makes me feel cool!).
A friend of mine just mentioned that he likes
bazaar version control. It looks very similar to git, (and may have some
advantages for certain situations -- especially if Windows users are loathe to install cygwin); however, I am already committed (for at least a few months).