Concurrent Versions System

By Shamus
on Jan 21, 2009
Filed under:
Projects

I apologize if this seems esoteric, but I have this problem and I know I can’t be the only one. I’m also curious about the tools used by other programmers out there.

CVS is a system used by people who write things like software or website source code. The Old Ways, before CSV, called for you just keeping a big heap of files on your computer, changing them as needed. Hopefully you keep backups. If you and another person both need to work on those files, then you send them a copy and the two of you have to be careful not to overwrite each other’s changes. Making a change to file F can cause problems in file Z, and so keeping track of who is working on what becomes a major part of your work.

And if there are ten of you? And you’re working one a vast collection of hundreds or even thousands of files? And everyone is constantly making many small changes to many files? Well… sending your changes to the other involved parties is no longer a solution to the problem. (This is one of the reasons that it’s so tough to scale a software project upwards. Doubling the number of coders on a project will more than double the complexity of managing all of those people. This is true of lots of kinds of work, but I’ve found it to be particularly true when dealing with source code.)

CVS helps with this. All of those files reside on a server somewhere. You can “check out” a particular file like checking a book out of the library. You make your changes. Then you submit all of your changes back to the codebase. Anytime you like, you can synch to the codebase and get all of the changes everyone else has made. The software keeps a record of all of the changes made by everyone. So if I run the latest version of the software and find out that someone removed the ability to invert the mouse y-axis in first-person view, I can look in the revision history and see every change made to that file. I can determine that Bob took that feature out, and I can then hire a group of goons to beat him to death send him a polite email letting him know about his mistake.

CVS lets you see all the code, anywhere you have access, at any point in history. No matter where you go, all you need is your CVS login and you can get the source code and you’re ready to rock*. You can go back to the source code everyone was using on May 23, 2006 at three in the afternoon, if you really need to.

* And by “rock”, I mean, “Sit hunched over a laptop in the airport with your cellphone clamped between your ear and shoulder, trying to figure out who in the hell messed up the order processing code two days before the Christmas holiday. What is wrong with these idiots? No, wait… I see. Looks like it’s actually a problem with credit card processing. No… It’s a problem with a change made to the authentication system. Made by me. Yesterday afternoon. Look, I’ll call you back.

Anyway, at my day job we have a system of source control, but I can’t very well use that for my various hobby projects. I decided I wanted to use CVS for my projects, not just for the version control, but also because it also makes a nice off-site backup. I was sort of astounded when there didn’t seem to be a solution for people in my position. There are commercial services aimed at large companies that want preposterous sums of money.

Given their Swiss-army-knife approach to features, this seems like an ideal job for web hosts. But only a fraction of them offer CVS, and those that do offer it via an arcane system where you telnet in and interact with (I assume) a Linux shell. Making a robust system and then building the interface around typing stuff into a console is like making a Wii that saves your game to a stack of punchcards.

We’re talking about a couple hundred kilobytes of data, tops. Given the number of people doing WordPress themes, websites, and PHP code in their spare time, I can’t believe there isn’t a solution aimed at the general public.

Maybe I’m missing something. If you write code on your own time, what do you use to keep track of it?

Enjoyed this post? Please share!


202020205There are now 85 comments. Almost a hundred!

From the Archives:

1 2

  1. Jeremiah says:

    I don’t do coding in my free-time, really, but at work we use a free versioning system called Mercurial. For the most part it works okay, but we’ve found it doesn’t handle really large files very well. There’s also something called TortoiseHg that gives you a better way of interfacing with it that just command line.

    Another one I’ve heard about but have no experience with is git, which I’m pretty sure is free as well.

  2. Tom Armitage says:

    CVS has pretty much been usurped by Subversion as the de facto simple, free, open source version control tool. It solves a lot of the problems with CVS, is a lot more user-friendly, and has lots of nice GUI clients, such as TortoiseSVN for Windows (that integrates with Explorer) or Versions and svnX for OSX. Lots of hosting companies have svn support.

    Personally, and at work, I’ve moved off svn and on to git, which is distributed, super-speedy, slightly bonkers, and solves many of the problems with svn. It is somewhat weird if you’re used to the CVS paradigm, and not as well supported by cheap hosting companies.

  3. Groboclown says:

    I’ve used Subversion, Perforce, ClearCase, PVCS Tracker and CVS. I’ve personally administered CVS and Perforce.

    One problem with CVS is that there is no checksum on the server file system. Another is no autonomous check-ins (that is, if something fails on a check-in with 6 adds and 3 deletes, it stops right there, and all that passed is in). It also has fairly miserable branching support.

    I’ve spent most of my time knee-deep in Perforce, and I really like it. You can get a personal server version for free (it hosts up to 2 users). For a pay product, it doesn’t have lots of bells and whistles, and there are tons of scripts and such around getting it to do backflips. It’s incredibly powerful. One small issue some people have with it is that directories are not versioned, so moving a directory ends up moving all the files, which clutters up the change history.

    Subversion, from my investigations into it around the time it went GA, is that it’s a free version of Perforce, with a few seemingly minor, but very handy tools missing.

    Overall, if you’re running a personal SCM server, I’d recommend whatever you’re comfortable with. For a larger scale, and when you’re on the cheap, I’d suggest Subversion. There are those alternative SCM tools like GIT that don’t have a centralized server, but I haven’t used those.

  4. Kilmor says:

    Why not just have a cvs server locally, and a cron job every X days that tars up your cvs dir and offloads it onto whatever remote location you prefer? Or email it to a gmail account. Or whatever offsite backup you prefer.

  5. wererogue says:

    Basically, I was going to say everything that Tom said, except that we still use subversion at work. I use the command-line regular ol’ svn variety, but basically everyone else bar one other uses TortoiseSVN and seem to like it a lot.

  6. AceCalhoon says:

    I haven’t looked into remote hosting of source control databases, but a shell like Tortoise (which supports both SVN and CVS) would probably mask the command line stuff pretty well.

    Edit: Scooped :-P

  7. Clint says:

    I’ll echo Tom and say that Subversion is what you’re likely to find in use nowadays. Subversion was specifically designed to address some of the shortcomings of CVS, and does things like retain the version history of files even when you rename them or move them to a different place on the server.

    If you’re looking for a good, cheap webhost that offers Subversion at no extra cost, DreamHost does the job quite nicely. I use them for my own sites, and they’ve been quite reliable. They also use economies of scale to to provide frankly ridiculous amounts of disk space and bandwidth on their standard plan.

    EDIT: Looks like they have a special on today in honor of our 44th President: $4.44/month, unlimited disk space, unlimited bandwidth. Interesting…

    If you don’t want to go the webhost route, I have a fair amount of experience setting up Subversion servers on Linux, and I’d be happy to assist you in getting yours up and going. I’ve used Subversion for the exact purpose you have in mind (backing up and versioning personal projects), and it is indeed ideal for the task.

    Also, I’ve been attempting to get in touch with you about the Free Radical thing, but haven’t gotten a response back. Did my email get through?

    Clint

  8. lebkin says:

    This is why this site is so cool. The first three posts all offer useful, yet different opinions on the solution to your problem. Now, I have nothing useful to add, since this is stuff I have never had to deal with. But this is all fun to read even if its not directly applicable to me.

  9. Kevin says:

    I understood many of the words in this blog post.

    :)

  10. Primogenitor says:

    Git, which works over SSH. The neat thing here is there is no server per-se, so if the server is toasted any of the users can become a new server.

    However, as I find version control overkill for lone-developer projects, I make regular duplicates (i.e. copy of X, copy of copy of X, etc) and use rsync to put them onto backup servers. Rsync minizes data transfer by only moving files that have changed, rather than the whole lot.

  11. TehShrike says:

    We use Subversion where I work, and use TortoiseSVN as the interface.

    Also, I noticed that Dreamhost offers Subversion as one of their services. w00t!

  12. cardboard says:

    I use darcs for my personal projects. It can pull through http and push through scp so you could probably host it on any web host that allows scp and shell access. You could also look at http://github.com/. If you don’t mind all your repos being public you can host as many as you want for free. This is assuming you don’t have anything against distributed source control.

    Darcs is nice because it’s retardedly easy to get going on windows. It’s a single executable you can just toss on your path somewhere. Then just go to the directory your little project is in and run “darcs init”, then “darcs add your\files”, then “darcs record -am ‘Initial Commit'”. Bam. Source Control. The repo is stored in that same directory.

  13. Markus says:

    I moved all my stuff from Subversion to Git about 1.5 years ago. It’s very powerful (although it has a somewhat steep learning curve), and in combination with GitHub you have enormous flexibility.

    There’s a community-written book available online for free.

  14. Hernes says:

    Subversion with Tortoise is good.

  15. LintMan says:

    My employer uses some lame-o boondoggle software as the official configuration management tool, but for the small project I was on (3 developers), my boss set up CVS for us to use.

    I don’t know if it works in a web hosting environment (we were on the company intranet), but we used a GUI front end for CVS called Cervisia which worked great for us and removed almost all need for any command line work (unless you’re doing some heavy lifting where you’d want to use scripts and stuff to automate things). A google search on Cervisia seems to point to a linux KDE version, but part of my work was in Windows, so either there is a Windows version available, or there is some equivalent CVS GUI that does run under Windows.

    Do you need the actual versioning software to run on the web host? What if you just run it local, and back up the files regularly to the web host? That would let you run whatever versioning software you want, and it probably wouldn’t be that hard to automate the backup process.

  16. Duffy says:

    From your post and what others have suggested, if you’re worried about keeping off-site copies I would suggest hosting a local Version control (I prefer a flavor Subversion) and then scheduling a FTP dump to some off-site storage service. Slightly more complicated then just using a service, but easily doable in both Windows and Linux. (And arguably better since you have control of the server.)

  17. JB says:

    Don’t like CVS and SVN. It convolutes the project directories with lots of extra cataloges and files. Makes searching in the files hell.

    The first thing a versioning system should do is stay away from my project files. My project files goes here. The files needed to keep track of the version history goes over there. That’s a strict and unbendable rule.

  18. K says:

    Eclipse
    Subclipse plugin (Subversion)

    A bit of configuration. And you are set up. Not using a versioning software is guaranteed distaster.

  19. LazerFX says:

    I can recommend subversion, it’s quite nice and solid, used it a few times. Also, have you looked at free code-hosting sites like sourceforge?

  20. Luke Maciak says:

    As many other people mentioned, Subversion is the way to go. Works very similar to CVS but, you know – it’s like More Better.

    Also, it has a very, very, very (did I say very?) user friendly open source Windows client called Tortoise SVN. It basically integrates with Windows explorer. Files in your SVN controlled folders will either have a green check-mark next to their icons, or a red x if they were changed. To commit, you simply right click on a file or folder and say commit. It’s so easy even a Geico Caveman could use it. :)

    Also, my host (Dreamhost) actually gives me a Subversion repository as part of my hosting package. You can configure the whole thing through their web based CPanel and don’t ever need to do anything on command line.

    I wouldn’t recommend using them them because they oversell their service like there is no tomorrow. You can see quality of service if you go to my blog and see how fast it loads. They are cheap, and you get lots of goodies that work most of the time, albeit slooow.

    If you are looking for an SVN hosting, this chart may help:

    http://www.svnhostingcomparison.com/

    Also, Shamus – don’t TELNET anywhere! It’s not the 80’s anymore. A lot of hosting services won’t even run a telnet server anymore. You are really supposed to use SSH for remote shell access.

  21. Jeremiah says:

    One thing I forgot to mention in my first post about Mercurial is one of the main reason my department (engineering) uses it. We’re in the field from time to time and so may not have access to our servers. With Mercurial, we can commit changes on our local machine (with all the power of submitting/tracking changes as well as being able to revert back to previous versions). Then when we’re back on the network we can synchronize with the central copy to keep everything up to date.

    (I have no experience with any of the other solutions mentioned, so for all I know this is a common functionality)

  22. hiddenbek says:

    CVS is a little long in the tooth these days, and lost its “default” SCM status to Subversion a couple of years ago. However, decentralized version control systems like Mercurial and Git are all the rage now, and do offer a number of advantages.

    -Speed. Most operations are done locally, so network latency isn’t a factor. Searching a repository or switching to a previous revision is painful in CVS or SVN.

    -Ease of use. Modern SCMs don’t need a server. Setting up a new Mercurial repository is as easy as typing “hg init”, then getting to work. It isn’t difficult to maintain a central server if you like to work that way, but you could just as easily run an FTP backup to keep your repository safe.

    -Flexibility. Not being tied to a central server has lots of advantages. If someone has an itch to scratch, they can easily clone your public repository and make changes, without having to pester you for a login. If you like what they’ve done, you can pull their changes back and have their work inserted neatly into your history. Or you could cherry pick bits and pieces. Conflicts are handled very gracefully. This works well for personal experimenting too. If you’re about to start something hairy, create a clone of your repository and work from there.

    Git is probably the most popular distributed SCM, but Mercurial is easier to use, has most of Git’s features, and tends to be better behaved on windows. Github.com (for Git), and Bitbucket.org (for Mercurial) both offer easy repository hosting, and have polished interfaces.

  23. Krellen says:

    I don’t do coding (I got out of programming for a reason), but a previous co-worker who did swore by Subversion, which he used for his personal projects. Since we’re a non-profit, it probably didn’t cost that much.

  24. Luke Maciak says:

    A relevant discussion:

    http://discuss.joelonsoftware.com/default.asp?joel.3.295044.9

    A relevant link dump:

    http://weblogs.asp.net/fmarguerie/archive/2005/04/27/404793.aspx

    Also, if you would want to host some open source code for free, then Google Code is probably the way to go. It’s very easy to use, it takes 3 seconds to create a project, and they give you svn, issue tracker and a wiki for documentation, all wrapped in a very nice UI.

    But I believe that you probably want to keep most of your repository private, which is one thing that Google Code does not provide.

    Btw, who is hosting your blog? A lot of hosting companies throw in free CVS/SVN with their accounts. You may already have one, and not even know about it.

    If not, I see a lot of people pimping this site on the interwebs:

    http://www.svnrepository.com/

    You get 5GB of storage for $6/mo which ain’t that bad.

    Alternatively, get yourself a throw-away Dreamhost account just for the SVN. You get like bazillion GB for about $9/mo. You also get free hosting, and MySQL with that so you can use it as a test server or something. Or for backups. It’s just gonna be a bit slow. And may go down for 3-4 hours like once or twice a moth.

  25. Joe says:

    It sounds a lot to me like people are misunderstanding your question. My understanding is that you completely understand version control systems and could probably weigh in on the evolution of RCS to CVS and the failings of both which are solved by SVN… You’re not looking for software, you’re looking for offsite hosting for your repository.

    Given that, I do believe that CVS is fading in popularity, and more importantly it has a name that is shared with enough other things that it is poorly googleable. (There’s a theory there for the age of ubiquitous internet indexing: The amount of entropy in your name is proportional to the usefulness of it and inversely proportional to your privacy)

    Anyhow, searching for free subversion hosting found a few things… I haven’t used them, but unfuddle certainly seems like it’s got a good setup… Free up to a limit, then going through cheap to… well, fairly inexpensive honestly (if you were wanting this service for a development company). There are a few others. Googling “version control hosting free” or “subversion hosting free” seems to give results.

    Personally, I haven’t used any of these services. I have a subversion server on my home network (actually, it’s in a VM on my gaming PC… my machines are very multi-function that way) which I occasionally back up. Yes, my personal data backup plan is for crap. Yes, I’ve lost data. No, I didn’t learn my lesson.

  26. catsclaw says:

    I looked at all the version control systems recently, and for what you want I’d recommend SVN. All the other software people are mentioning–Mercurial, Git, Bazaar–support some really interesting features, but they’re newer and there’s a lot of competition, so there’s just not as much support for any single one. And you probably don’t really need some of the more esoteric features.

    SVN is common, highly supported, very solid, and will be the standard for a long time. And if you decide you really do need a more recent source control system, it’ll be trivial to migrate your repository.

    It’s easy to run SVN locally on your filesystem without a server, but you obviously don’t get the advantages of having your files available over the network. I was using Dreamhost (which is certainly dirt cheap and reasonably good) but their SVN support is only adequate. I just switched to WebFaction (http://www.webfaction.com) and I’m much happier with the hosting service overall (and the SVN support is significantly better as well). Only $5.50/month if you prepay for 5 years, although I’m on the $8.50/month plan which only requires prepaying for 1 year.

  27. Rob Conley says:

    CVS has various weaknesses that Subversion overcomes. Combined with Tortoise it is one of the best tools out there.

    Tortoise is an extension to Windows Explorer that allows you do easily do a variety of subversion command. However you want to stick with CVS there is version of tortoise for CVS as well.

    Finally there is Git. It’s advantage is that it doesn’t need a server and it has strong merging and branching capabilities. The only issues is that it is a newer version control system and fancy (and easy to use) utilities are still evolving.

  28. OddlucK says:

    3.5 inch floppies and some cave drawings. Next year, I’m hoping to implement fire and see where that takes me.

  29. CVS and Subversion are out of date. I wouldn’t even use them anymore for an individual project… in fact, I don’t. Distributed source control isn’t just better because it’s distributed, they fundamentally use better models of source control. Check out Linus’ video on git, but bear in mind most of what he says about git applies directly to Mercurial (they are very similar) and to a lesser extent the other DCVSs as well.

    I can’t emphasize enough that they use fundamentally better underlying models of source control. It’s not just a quantitative change, it’s a qualitative change. It’s hard to grasp initially because CVS/SVN tends to so thoroughly color your view of source control that you can’t see past it until you shed the CVS-tinted glasses. DCVSs make things that CVS/SVN can only do with great pain easy, and they do a whole whackload of things that CVS/SVN are completely incapable of due to structural issues.

    With git, you can easily sign up with one of the free git hosting services and having a (public) backup of your project is as easy as a periodic (and very cron-able, though I actually don’t recommend that because once you “push” something it’s basically frozen) “git push”.

    Anyhow, I strongly recommend watching that video and going with a DCVS. All the serious contenders have already been mentioned in this thread. Even if you don’t think you need the features, as a programmer you will rapidly find that yes, in fact you needed them all along and just learned to live without for so long that your expectations warped to match the old state-of-the-art.

    (Git also has excellent SVN integration; you can use Git on any SVN repository and still retain most of the power, though you don’t get it all due to SVN’s technical limitations.)

  30. Shamus says:

    This discussion touches on an interesting tangent:

    I’ve noticed many open-source ONLY systems that are free, but I don’t want to use those. Even if I plan to share the source someday, it’s nice to be able to work in privacy. I don’t like the idea that anyone can know what you’re working on, and when, and see all your mistakes and aborted projects as you go. Sometimes it’s nice to polish something a bit before throwing it at the web.

    Even if nobody really cares, it gives me the uneasy feeling that everyone is looking over my shoulder.

  31. Shamus says:

    Oh: Thanks to the many insightful answers. This has given me quite a bit to digest.

    I considered moving to DreamHost a couple of years ago. (As DMotR was getting rolling.) Glad I didn’t. They could never handle my traffic. Heck, they can barely handle low-traffic family blogs that get a couple dozen visits a day.

    I use HostingMatters, for those who asked. No, they don’t offer any of the services discussed. Alas.

    Still pondering my next move.

  32. Kotenku says:

    This sort of thing exists?

    I wish I’d heard of this sort of software any time I’ve ever tried making a module in NWN or a map in Starcraft as part of a collaborative effort with other people.

    I suppose it probably wouldn’t support those filetypes though, so maybe the collaborative gaming communities are still SOL.

  33. Shamus says:

    Kotenku: If it’s a text-based file, it should work beautifully with whatever versioning system you use. A bit of trivia for the TRULY curious:

    One of the things I want to use this for are my comic files. The comics I write are stored in text format (they’re INI files, really) which makes them pretty much like any other kind of source code.

    [Header]
    Pages=5
    Zoom=73.3835
    View=-2.92179,-3.31737
    Page=4
    [Page0]
    Bubbles=15
    Textboxes=2
    Panels=6
    Color=16777215
    Width=4
    Height=16
    [Page0.Bubble0]
    Font=LetterOMatic!
    FontSize=20
    BackgroundColor=16777215
    Text=oh i'll bet its a great one.
    TextColor=0
    TextLineSpacing=0
    TextOutline=0
    Origin=2.2,3.9
    Anchor=0.43554,-0.389981
    OutlineColor=0
    OutlineSize=30
    TailAngle=0
    TailSize=237
    Child=0
    Constrain=1
    [Page0.Bubble1]
    Font=LetterOMatic!
    FontSize=20
    BackgroundColor=16777215
    Text=hey, back off! i've got a plan!
    TextColor=0
    TextLineSpacing=0
    TextOutline=0
    Origin=1.92118,2.89235
    Anchor=-0.695911,-0.0307395
    OutlineColor=0
    OutlineSize=30
    TailAngle=0
    TailSize=214
    Child=0
    Constrain=1

    I originally did this because it was a quick & easy way to save / load files, and planned to replace the text file with a “proper” file format later. Then I realized text-only is actually easier to debug, more future-proof, and easier to work with.

  34. K says:

    It’s the age of XML and you use ini-files?! How could you!!

    But if you have a flat structure, that’s perfectly valid. No need to overcomplicate. I’m astonished your host does not support anything like that. But you should be able to setup a subversion repository yourself. Yes, it will probably require a SSH session, but only that one time. The process is rather well documented.

  35. Luke Maciak says:

    @Shamus: Brilliant! Text files FTW!

    @Kotenku: SVN and the like will work with binary files. That is, they will allow you to upload them and revert the changes and etc. It will also tell you whether or not the file in repository is different from the one on your drive.

    What it won’t be able to do with a binary file is to tell you how it is different. With text file you can run a diff on both files and see the changes highlighted (well, depending on the client) for your convenience. You can also attempt to automatically merge both versions. Can’t really do that with binaries.

    So you lose a little bit of functionality there, but it is still better than emailing files back and forward.

    @K: Ah, but XML is not always the answer. Sometimes using XML for stuff like simple configuration files is like killing a fly with a bazooka. Sometimes all you want is to read few lines out of a text file, then split these lines on a delimiter and create a hash table/associated array out of them.

    In most languages you can do that in about 3-4 lines of code without importing any external libraries. If you go the XML route, now you have to use some sort of XML parser library which may introduce a dependency.

    Sometimes it is better to keep it simple.

    My rule of thumb is – if the data that is to be stored in the file fits on your screen without scrolling, you definitely don’t need XML.

  36. Tachevert says:

    I saw that someone else mentioned Dreamhost, but I’ll reiterate it. One of my favorite features of Dreamhost as a web host is that they provide a web-control-panel interface for quick creation of Subversion repositories. Extremely painless, and a great value-add.

  37. K says:

    I was joking on the XML part ;) I know only too well what kind of backend you need compared to text files.

  38. radio_babylon says:

    i recommend dreamhost and subversion (SVN)… dreamhost has a very simple nearly-one-click svn repository setup, which solves your source control needs and your offsite backup as well…

    it isnt CVS, but i think youll find you like subversion just as well. ive been a long long time cvs user, but in the last year or so ive had to start using subversion for a client, and even though i hated it at first (because i hate and fear change) its kinda grown on me.

  39. Jacob says:

    I share both your need and concern about having your projects public. There are a couple of sites that offer svn hosting for small projects for free. I’ve used DevjaVu and Assembla in the past and was quite pleased with both. Assembla is more useful if you have a limited team because it includes project management tools. I think Assembla has changed their plan for the free stuff, though, so it’s no longer private. Someone else mentioned Unfuddle which I’ve had my eye on but not actually used.

  40. Alan De Smet says:

    Having worked with CVS, Subversion, Git, and (*shudder*) Visual SourceSafe, my thoughts are: CVS is dead; Subversion trumps it in every meaningful way. For single person projects, or other situations where you will never have multiple active branches, Subversion is simpler to use. So for a simple web site, or a personal project, I’d recommend Subversion. When it comes to merging branches it’s better Subversion is better than CVS, but not epically so. Git rethought merging and is really freakin’ good at it. For a larger project or any situation where multiple active branches are likely, I’d recommend Git. I recommend Visual SourceSafe for people who hate themselves.

    I hear good things about SVK (Subversion extended to be distributed), Mercurial, and other systems. However, I’m not hearing that they’re head-and-shoulders better than Subversion or Git. And when critical systems are reasonably close in functionality, I prefer the one with more users, as it will likely be more stable, better maintained, and better support available. SourceForge, home of many open source projects, is on Subversion. Google Code and a number of big open source projects (Linux, Git, Gnome) are Git or are moving to Git. I’m not seeing the other version control systems getting the mindshare.

  41. Zack says:

    Well I admin a couple Linux CVS servers. I set them up mainly because they are very well supported by every client under the sun and my company uses several dev environments at several locations.

    On the bad side I have found at least 1 CVS protocol has issues with intermittent connections and slow data pipes. This is a protocol most people no longer use (pserver) and I have some reason to believe that hardware might be a contributing factor.

    I have been struggling with this issue for a while but overall I love CVS for its stability. I had a server on an old 486 run 5 years unattended before the disks melted in a server room accident. (Long unrelated story)

    Subversion I use at home on a Windows box for my RPG notes, I did this to stay current on the “other” widely used version control system. It has worked quite nicely. On the bad side I have heard that the Eclipse subversion plugin has a quirk which can allow a developer to roll back data accidentally when working on multiple branches. (Short story, Dev1 had an old checkout of a branch which he tried to check in. Eclipse plug in somehow rolled back all subsequent changes then added his fixes onto the branch from the old state without warning him he was out of date. This is a big no-no and required manual reversion of each file affected but no data was lost. But I heard it was an issue with the eclipse plug-in in a specific situation that I expect you are unlikely to encounter. (but is relevant for me as an eclipse user))

    We also use Visual Sourcesafe with some of our MS IDEs since it is “packaged” if you use the complete Visual Studio suite. I personally have a very low opinion of this system because there was an issue several years ago which corrupted some data and resulted in us losing the entire repository. So I considered this a total failure of a source control system and it left a big impression. I also read bad things about remote access to sourcesafe expecially with broken/intermittent connection. (As far as I have been able to research – VSS was written as a LAN based version control system and is not recommended for remote solutions. It isn’t widely used even within MS which says something about its stability.)

    With any solution I suggest you make regular backups to a separate disk or machine. As an extreme example my CVS servers I have hourly rsync jobs back up the live data to a secondary disk. Nightly jobs zip a snapshot of that backup which is kept on site for a couple weeks. Each snapshot is immediately uploaded to a separate server and backed-up to a off-site system in a former bunker. (Each step has been useful at one point or another (disk failure, server failure, server-room failure, destructive alterations of codebase requiring archived file copies for comparison, etc))

    Any version control system paired with a regular backup solution will give you a huge amount of security. Try something convenient for you and send a zip to a friend’s machine as an “off-site” backup in-case of natural disaster. Return the favor to your friend and you each provide redundancy to the other with no hosting fees. I am sure you know someone in a simular situation as yourself and disks are cheap and data transfer scripts are easy to write.

  42. I am a computer engineer and I use version control systems (VCS) daily. I am mostly echoing others here …

    Don’t touch CVS. It’s dead and stupid. The only reason to use CVS these days is if you are interacting with some legacy system. Deciding to use CVS would be like deciding to program in QBasic. Subversion has supplanted it. Once you use Subversion, you will wonder how you could ever stand using CVS. It’s a big step up.

    The biggest thing is atomic commits. CVS tracks files individually, which comes from its RCS roots. This is a Bad Way to do it. Subversion looks at sets of changes all at once, which is the way the developer looks at them. All modern VCSs do atomic commits.

    However, the paradigm that CVS and Subversion run under is fundamentally flawed, and I would suggest not even using either. Subversion is better than nothing, and nothing is better than CVS (no really, it is). Luckily, in just the past few years some better systems have come into play: distributed version control.

    Git, Mercurial, Darcs are some examples of distributed VCS. With these systems, you don’t need to run a server or have some special place for the repository. Personally, I recommend git because it beats the pants off the others.

    Since I got hooked on git I can’t stand Subversion. The step up from Subversion to git was just as big as the step from CVS to Subversion. It’s like driving a fancy sports car after having to walk everywhere your whole life.

    The advantages noted will be pretty much the same across all distributed version control systems.

    Backups are trivial: you can just copy the repository that sits along your source code. Zip it up, whatever. Or you can use the system itself to incrementally push commits (i.e. “git push”). With git, you can push updates to a remote repository over, say, ssh on some server. Note, this remote repository need not be visible to the world.

    It’s easy to start a new project. You don’t need to set up and configure a new repository on some server. You just make a new directory and “git init”, and you are ready to go.

    Parallel development. Got some idea you want to attempt, but you aren’t sure how it will go? Create a branch and work on it there. If it works out, merge it in with the main code. With git, it is very easy to create and work on different branches of development. Doing the same thing on Subversion and CVS is so difficult that is it rarely used. Once comfortable with git, you will probably find yourself making and merging branches all the time.

    Speed. Subversion and CVS are sloooooowww. Generally CVS and Subversion are accessed over a server, so you are always waiting on that latency. With DVCS, everything is local.

    Size. This is less of an issue for you since you said it was only a couple hundred kilobytes anyway. Amazingly, git repositories (entire projact history) are virtually always smaller than a Subversion checkout (single revision). Git creates the smallest, fastest repositories of all VCSs out there.

    Security and integrity. DVCSs are cryptographically secure, by necessity. It is virtually impossible for someone to maliciously or accidentally modify your repository’s history. In the same way, if there is ever any kind of corruption in your repository (disk, data transfer, etc.), you will know right away. This is not the case with CVS or Subversion. If there is corruption in your CVS/Subversion repository, you won’t know until your source code starts getting checked out with garbage in them.

    Lots of older projects are moving to git. For example, perl (you know, the language) just finished moving it’s 20 years of repository to git.

    And here’s the big hook that I think you will like. Git is designed with repository editing in mind. You can do all your dirty hacking, trying things, throwing things out, until you get what you like, just like any VCS. But with git, you can easily go back and clean up your project history, so if you share your work later no one has to see it.

    This is encouraged. Someone may be working on some single aspect of a project privately. Once they are ready to share it is easier for others in the project to follow what’s going on if the history is edited to a nice set of logical changes.

    As a final note, you seem to be a bit confused about sharing code, Shamus. Just because you use this VCS software doesn’t mean you have to let people see your code. Some of the cost-free services like GitHub, yes, but unless you want to share your code you have no need for these services anyway.

    So, my advice is git. It has a slightly higher learning curve, but it is much more powerful and useful than CVS and Subversion. It is also much easier to administer.

  43. Derek says:

    For saving your stuff offsite, I’d recommend Dropbox. Works in Windows, Linux and Mac, and automatically keeps all files and directories you create in your local dropbox directory synced with all other machines you have associated with your dropbox account. It also stores all those files in the Amazon S3 online data storage, so it’s remote. It’s great, because you just work on your machine as you normally do, and it automatically uploads all your changes up to the server and to your other machines anytime you change anything. Also great for keeping things synced between a work and home machine without having to remember to send files back and forth to yourself. You can also undelete files that were in your dropbox, which has saved me in the past.

    Oh, and it’s free to backup up to 2GB of data, or you can pay for more space.

    Anyway, whatever RCS you use, just create your repository in your dropbox directory, and never worry about it again. :)

  44. Ingvar says:

    CVS locally, until I decide it needs external support infrastructure. In the past, I’ve used Savannah but these days, I seem to mostly get things handled externally by common-lisp.net (very much NOT implementation-language agnostic).

    However, I am starting to smell a possible business opportunity for some crafty individual. Charge a couple of bucks per time unit (I am thinking USD 25 per year, per person), provide Version Control System Of Choice (CVS, Subversion, Git and Mercurial would probably cover it), make sure you back things up religiously, provide some sort of secure access to the VC and some sort of data set size limit.

  45. Noah Gibbs says:

    If you don’t mind people seeing your stuff, you can use a service like SourceForge, which will host for free. These days they use CVS or Subversion, or (for cutting-edge sites) git, usually a choice between the two or the three.

  46. Muttley says:

    am I the only one who thinks SVN sucks? It’s missing tags (which CVS has, btw). How the hell are you supposed to find out which consistent set of file versions can you check out?

  47. Fortran says:

    I’ll throw my two cents in here. Back in grad school, I used a self-hosted SVN repo to keep track of my papers and thesis. And dear FSM did it help. However, once out of grad school, I no longer had access to that server. So, I had to transition.

    I decided to go with GeekISP. They aren’t the fanciest solution, but they are affordable, and the support has been quite good in my experience. I recently put up a WordPress blog on the domain they also host for me, and they were quite helpful in trying to figure out what I was doing wrong. (Almost all access is via SSH, so no cPanel or fun things like that.)

    You do have to ping support whenever you want to create a new repo, but they seem to respond within hours of that request.

  48. Derek says:

    @Muttley: SVN does have tags. I frequently tag software releases so that I can easily find them again.

  49. Muttley says:

    SVN doesn’t really have tags, it has a “tags” directory where it copies a chosen version of your code. The problem is, nobody can stop you or any of your coworkers from erasing the directory or modifying it. CVS tags are persistent, therefore you always have the possibility to track the history of the code.

  50. Ivan Voras says:

    The one thing not often mentioned about the bleeding-edge distributed versioning systems are that, along with the good sides, they also introduce some complexities. They are not just “better SVN”, they rely on a different model of development. It goes something like this: if you’re the only developer then you won’t care – commit and checkout to and from the same tree, push changes to the server. If there’s a small group of developers, somebody has to be the lead and maintain the “official” tree, integrating contributed changes. It’s not very complex but can require nontrivial profficiency with patching. If you’re a large organization with dozens or hundreds of developers, you need a release manager anyway so it’s not a gigantic step. All of the popular SCMs and DSCMs (including CVS) are used by a wide audience, working with project sizes on both sides of the spectrum, so despite what Linus says their scalability isn’t questionable (there are, of course, better and worse tools).

    Personally, I like how SVN provides the “directory” abstraction model – all branches, tags, etc. are virtual directories in the repository: need to cut of a “release” version? svn cp repo/trunk repo/branches/mysw_1_0. Need to merge changes between trees? svn merge . repo/trunk. I think now almost every tool supports similar abstractions but SVN was first :)

    As for hosting, probably any hosting company based on Unix/Linux machines that offers SSH access can trivially offer CVS and SVN (and probably others) access. I like http://rsync.net/ for their low-level approach – no magic.

  51. Kobyov says:

    Yeah I’ll throw my hat behind subversion as well. On the basis that it does everything I need from a versioning system (which isn’t much) and doesn’t give me any hassles

  52. brcarl says:

    At work I use SVN with the Tortoise front-end (Windows).

    At home I use a USB external drive and the free version of SyncBack (http://www.2brightsparks.com/). I usually just overwrite my existing backup tree, but if I feel like making a tag/branch, I’ll just manually create a new folder and then update the backup target.

  53. Zack says:

    I am shocked at the level of support for GIT here. I mean it is the newest/coolest version control and works great if you are developing Linux on Linux… But is the cool factor of a new technology really worth using it when all you want is a tried and tested backup of your data?

    I mean just a year ago GIT’s documentation was completely lacking and I still find its windows support very young. I would love to play with it, but I would currently suggest SVN over it just to use something that has been around longer is better supported/documented on whatever platform you are running.

    The GIT fans sounds a lot like the JAVA fans in the early 90s and RUBY fans of last year. Early adopter cred isn’t really worth getting stuck using a technology that is no longer supported. Also young technologies tend to require more attention while they are still evolving. I like my version control to be set and forget and nothing this new is truly stable even with great developers behind it.

  54. wilberforce says:

    I use Subversion every day at work, and it’s mostly brilliant. For home stuff I use Bazaar, publishing over ssh to a repository on my server, but as other people have pointed out, the nice thing about DVCSs like Bazaar is that if I’m off the net I can still commit locally and then push changes up to the server when I get back online.

  55. Anaphyis says:

    You have multiples machines at your home with complete house networking and still no small server? You should change that, seriously. Going to professional hosting companies is fine if you have a large number of hits, shoveling several GBit/s out of the door or you would go bankrupt if you have a hour downtime.

    But for small home appliances like version control for a single or even a few people, dealing with mail and in house file services … I honestly don’t know how to live without that.

    Edit: Zack QFT, if you don’t actually NEED the features Git has to offer above Subversion, you should choose the latter; documentation, support and third party applications are just way better on that side of the field and bleeding edge isn’t something you’ll want when it comes to your version control.

  56. Shishberg says:

    wilberforce’s comment matches mine exactly.

  57. Michael McHenry says:

    Hey, Java wasn’t even released until 1996!
    http://en.wikipedia.org/wiki/Java_version_history

    Java fans in the early 90s must have been real visionaries…

  58. You do not need a remote host to make good use of versioning, as long as you have backups of your local repository. I use Subversion on Windows via Cygwin to keep various (C /PHP/Perl/Java/etc) projects versioned, both to local and remote repositories. I do not use TortoiseSVN as I found it actually gets in the way of proper management. Having used CVS in the past, Subversion is just so much better…

    I considered switching to Git just to see how that’d work, but I’ve heard some very bad things with the Windows and Cygwin versions of it, so holding out till that stabilizes.

  59. Alan De Smet says:

    @Zach: Stability and safety are critical for a source control system. And age is a pretty good indicator for both. But there are other indicators. Usage is a pretty good one. In the case of git, it’s used by Linux, Perl, and Gnome is switching. The Git home page offers other users, including WINE, Fedora, and X.org. These aren’t fad projects without much to lose. These are old, respected projects with long histories and huge piles of code. They didn’t jump following the new hotness, they decided that Git was trustworthy and safe. As someone considering Git, knowing that big projects are using it means that there are large numbers of other people depending on it, so you’ll have a large community doing testing, providing support. There are many invested people able to step up to maintain Git if necessary. Git is relatively young, but has many, many users and piles of code under its control that seems to be doing just fine.

    Git is new, but it’s not just today’s buzzword that will fade away in a few years. It’s here for the long haul. It’s designed for security, with features like secure hashes for every commit, and digital signatures. Jumping to Git isn’t terribly risky.

    This is like people jumping to Java. In 2000, when it was clear that Java was rapidly growing, being used for important work and in it for the long haul. You might argue that one can overemphasize the importance of Git, but the evidence is that Git, like Java, is not a deadend technology.

    (The irony is that I’m not actually all that enamored of Git. It’s got several annoying behaviors: It’s expensive in space to keep multiple versions of the same project available at once; you can’t work on a sub-section of an existing project without getting the entire project; reasonable use cases generate unnecessary merge commit. More seriously, Git is just weird to many, perhaps most, developers. Git’s way of working makes sense, especially in a highly distributed environment, but is decidedly non-obvious. I think it’s a good system that’s right for many people, including one project I work on, but it’s still rough.)

  60. Max says:

    On coding in obscurity until your code is “ready” to be open-sourced:

    Coding Horror – Don’t Go Dark

    Use Subversion, Git, Mercurial or Bazaar. Whichever one catches your fancy.

  61. I’ve personally used darcs and like it, but from what I’ve heard, I can soundly recommend any of git, mercurial, or darcs (in that order). All are FOSS.

  62. Zack says:

    Michael McHenry: Oops I meant Java developers in the late 90s… But that reminds me of back in 97 when I interviewed somewhere that required 5 years Java experience… Never got that job… *heh*

    Alan De Smet: For the record I was a Java programmer in 2000. But I avoided it like the plague in 1996 when all my friends were clamoring about it. I am a tech curmudgeon, I like to let the young folks debug a technology before I burn cycles working on it.

    While most geeks love anything new I dislike having to code around bugs in my underlying libraries. (which I did have to do on Java 1.2 BTW)

    And my comparison to Java was deliberate. I think GIT has enough momentum to be big someday. But right now notice how your example list were all Linux/Unix based projects? There just isn’t as much windows support and I do most of my work at home on Windows boxes. Until the windows support catches up to where Linux GIT support is I can’t really use it. And I was assuming that Shamus was doing most of his work on a windows box and only using Linux for server kinda like I do, but I could very well be wrong.

    What do you use Shamus? I am curious now that I think of it. I know you use Linux some, but my impression was that was for hosting and not daily use.

1 2

Leave a Reply

Comments are moderated and may not be posted immediately. Required fields are marked *

*
*

Thanks for joining the discussion. Be nice, don't post angry, and enjoy yourself. This is supposed to be fun.

You can enclose spoilers in <strike> tags like so:
<strike>Darth Vader is Luke's father!</strike>

You can make things italics like this:
Can you imagine having Darth Vader as your <i>father</i>?

You can make things bold like this:
I'm <b>very</b> glad Darth Vader isn't my father.

You can make links like this:
I'm reading about <a href="http://en.wikipedia.org/wiki/Darth_Vader">Darth Vader</a> on Wikipedia!

You can quote someone like this:
Darth Vader said <blockquote>Luke, I am your father.</blockquote>