Assignment 3 -- Subversion
Tuesday, November 1, 2011 1:02:27 AM
Now that I know what it is, I think there is no one out there in their right mind who would suggest against using at least some kind of source control. That being said, this is the first course I had to take in computer science where I actually get to use it. In this assignment I need to explain the concepts of source control and the specifics of a source control client called Subversion. I have come to think that everything is understood better in terms of contrast. So, it comes down to "yes-source control" / "no-source control" and "yes-subversion"/"no-subversion"? No, that's not right --- I hear there are other options for source control out there, like an older incarnation of svn--cvs or many of the new"er" kids on the block from the proprietary camp with fancy names like "Synergy" or "Plastic". The only one I know is subversion, so can I compare it to Dropbox? The "subversion" for the vanilla non programmer population.
Before I get into that, what is source control (sc)? Short answer -- it is what made me disillusioned with DropBox -- as apparently it's not that original. Long answer -- it is a way to maintain a record of all changes made to a particular document, be it a c++ source or a plain old .docx. The reason it is a good idea is it allows for collaboration, accountability, backup/rollback if an error had been made, and management of releases. If multiple people are working on the same file, source control will either aid in reconciliation of the conflicts by merging different parts together or highlighting the conflicting parts for humans to sort out. Some sc models straight out forbid such an occurrence by making files in sc read-only and only allowing one working copy at a time.
How to pick the correct sc client? In the end, it all comes down to a few very important functions that every source control client must have in order to be better than storing everything on your flash drive. These important functions are: revision record, ability to roll back, ability to merge and resolve conflicts, collaboration, common source storage, and true-atomic-commits to prevent corruption of half-finished/interrupted uploads. Some of the more advanced (frosting?) type functions are: ability to create "read-only" tags, support for branching(with revisions having non-integer increments in a branch), comments on commits, and support for multiple platforms. There are actually a myriad more functions that source control clients offer but which I have no direct experience in, and/or little understanding of -- like symbolic-link versioning, internationability, parsability of output, etc.
Personally, all I know is Subversion, also known as SVN. Even so, some features of SVN I only found out by researching sc clients for this assignment, like 'parsable-output' or 'native-support for binary files' among others. What I have realized is that svn is good at is making sure commits are complete -- the true-atomic commit feature. As in, if I loose internet in the middle of a commmit and only upload changes to half of the files I actually worked on, svn will roll-back to the last complete commit. Another feature I find awesome is how I can have a working copy on my work station (doing hw during breaks of course
), my home pc and school! Did I mention that I have different OS running on all three of those machines? That part--just blows my mind (screw Dropbox). Another excellent feature of svn is the commenting. Such small and "non-tech" of a feature, but what a sweet addition. I leave notes not just for myself but also can keep on with what my partner is doing, since with every commit I can "tweet" her what I've been up to and she "tweets" back with her next commit. Yes --- enter the real 3081W twitter. There are other important features of subversion that I have been using, for example once I broke my code and had gone too long without compiling it so I could not tell where I messed up. Instead of breaking down over just how little ctrl-z remembers I simply copy/pasted from iteration_1 tag folder. Thus it makes sense to make the tags read-only, though svn does not offer that, so I just need to watch myself. Another important feature would be branching, but we don't have that major of bugs, neither did we have any releases -- so I offer no feedback on that.
All in all, SC is essential and SVN is pretty good as far as I can tell. Let me know if I missed anything in the comments.




