“Version control systems, or source management systems, are an important aspect of modern software development. Not using one is like driving a car too fast: it’s fun and you might get to your destination faster, but an accident is inevitable. This article provides an overview of Software Configuration Management systems and their benefits, including CVS, Subversion, Arch, and Git. It also reviews the most common SCM architectures. Finally, it explores some of the new approaches that are available and how they differ from the earlier methods.”
The article is a bit short, but has some good info for folks just getting started with SCMs. That said I have a couple small issues with it. I’m personally a subversion guy, but I do wonder why they chose to completely ignore DARCS. Also, after reading this and getting my first look at git, is there anything it brings to the table other than some seriously nasty syntax?
Yeah, git brings with it extremely easy branch management.
With subversion, I’m used to having difficulty with branches, since you have to keep track of where you branched and merge manually.
With git, it keeps track of how far you’ve merged branches, etc. Basically, when you are finished making changes on a branch, just merge it and git will figure out how to do it.
The way I use them both is: subversion for small projects, things without lots of branches; git for larger projects, or projects where I might want lots of branches.
Also, if you want more “refined” git commands, you can try cogito, which is a set of scripts to make git more human friendly.
I’m a big Subversion fanboy. After suffering through the hell of CVS, SVN made revision control workable and enjoyable for me. A single rev number as opposed to per-file changes really does it for me.
I like Subversion a LOT, mostly because it fixes CVS problems, but also its atomic commits (no failure halfway through a big commit) and simple branching. Oh, and don’t forget that its default HTTP-DAV protocol can punch through firewalls.
However, I’ve more than once needed decentralized development, and SVK seems to do the trick nicely. You get the additional functionality without sacrificing a lot.
http://svk.bestpractical.com/
I second svk. I started working with it a few days and it’s great. It’s the first VCS I feel comfortable with.
I’m constantly amazed that Monotone consistently gets added in as by-lines to these types of articles. IMHO, it’s the most powerful, flexible, and reliable distributed SCM out there.
http://venge.net/monotone
I just took a peek at Monotone. It requires the “Boost” C++ library. I tried installing Boost from source the other day. It’s, unfortunately, a bit of a pain. It’s also a large download, and I didn’t readily see how I could just build only the parts I needed. Kinda’ makes me want to stay away from projects that use Boost.
Just because you have trouble installing a library does not make monotone any worse. Boost is a very very nice collection of libraries and additions to C++ and quite widely used; your distribution should have packages of it.
Disclaimer: I haven’t actually used monotone. I just think that saying “boost is too hard to install, so I don’t even want to try anything that depends on it” is a bit weird.
Those are the two most important distributed SCM.
The slide on the following URL introduces the performance aspect of mercurial http://indico.cern.ch/contributionDisplay.py?contribId=29&sessionId…
Merucial has a very small python+C codebase, which is more portable than darcs.
bzr seems the most promising to me. A commitment to good docs and ease of use, coupled with using modern tools to implement it (Python). On top of that, it’s GPL’d *and* it’s being strongly supported by Canonical.
Edited 2006-10-13 01:06
Worked originally with RCS core and tons of perl and tcsh wrappers to support it. Since then I’ve been working with CVS, a small engineering company that plays with lots of interesting projects, mostly hard core photogrammetry.
My partner and I are constantly wanting to move away from CVS, primarily because of file & directory rename.
One thing to note is that we’re heavily invested in the CVSROOT/modules concept. We’ve got more than one commercial project in CVS and we have about 30 modules (plus 30 more for the unit test drivers) which we pick and choose from for the different projects.
With this last new project we tried running in Subversion. But regarding the modules part it utterly failed, subversion didn’t do it.
We looked into git & bazaar but none of seem to deal with this problem either. It seems arch has somethign called “configs” but I haven’t found jack for documentation on it.
Biggest complaint aobut all of the above is that the package downloads all exceed 3MB each for the compressed tarballs. For something conceptually as simple as a source code management system this seems way overkill.
So looking at more minmal stuff: Mercurial & Codeville.
Mercurial again has nothing to deal with modules, setting up multiple repositories currently is a pain. Compressed tarball is about 350k.
Latest one is CodeVille. Compressed tarball about 90k!
The server very trivially supports repository create/remove so it was very easy to independently import all the modules. I wrote some very simple supporting scripts to allow shallow directory recursion and scripts to define how to check out a specific project (sort of like a CVSROOT/modules parser). For good or for ill I’ve been checking things into CVS and CodeVille simultaneously, just to fill the codeville repository with changesets so at least there’s *something* to evaluate.
Sadly Codeville hasn’t seen a release since Feb 2006 and it’s definitely rough around the edges, ESPECIALLY documentation wise. One thing I seriously like about it though is that it is small enough that I could personally start hacking on it myself or perhaps even port it to a scripting language I like better (no offense to python, it’s just not as cool as other languages).
Anyways conclusion is that we have yet to find something good enough to replace cvs, for our needs it’s still better.
I can’t believe that they didn’t bother to mention Visual Source Safe! In my opinion, VSS serves a very important role as an SCM, different from all those mentioned. When I first started at my current job, they only used VSS here, and then I shortly after learned about SVN. I don’t think I would have nearly as much respect, even love, for SVN if I didn’t have the steaming pile of crap which is VSS to compare it too.
Don’t discount the importance of a bad (really, really bad) example.
Derek
Thanks for the comments Brian.