ben's SCM page
Source code management (SCM) and version control (VC)
systems:
- RCS
- version control for individual files. Like SCCS but represents
history as a series of diffs. No remote access.
- SCCS - version control for individual files. Like RCS but represents
history as a list of lines and which versions they are present in.
No remote access.
GNU has an implementation called
CSSC
- CVS
- version control for trees of files. An old classic that
everybody loves to hate but is the de-facto standard for open
source software development (though in the past year or so that
has slowly been changing as other systems become usable). Central
repository. Poor
support for working offline (wrt to the central repository).
Branching is slow and lame. Use RCS-like data file format (with some
extra metadata). Network connectivity over own protocol (for
anonymous access) or rsh-like protocols (eg ssh). Each checkout has
no history - need to consult central repository for that.
- darcs
- written in Haskell by a physicist, but apparently ok despite
that. I've used it a little for 'msnlib' development.
Based on
a
theory of patches, where abstract patches introduce some
kind of change and have possibly many concrete representations.
Repo format is a set of representations of patches that when all applied
to the empty repository give the head version.
distributed/offline working. push/pull/mail. Each checkout has
full history. Branches supported by creation of entirely new
repository by cloning existing one (this is also one of the ways that
git can be used).
A Google search for 'darcs patch theory'
found (at time of writing) quite a nice selection of links.
- GNU Arch
- dunno much; distributed/offline working(?)
- subversion (SVN) - dunno much.
doesn't seem to support distributed development.
The O'Reilly SVN book is
available online. Explicitly created to be an improved CVS, rather
than
- git - my favourite at the time of writing
- centred mostly on the linux development community.
distributed/offline working. repo format is
content-addressable hash table thingy with entries being
commits, trees, files. push/pull/email. Network connectivity over
own protocol (for
anonymous access) or rsh-like protocols (eg ssh) or http.
Each checkout has full history. The suite is implemented in a bunch of
different components, git being the core and others such as
cogito and stgit adding more functionality. I'd recommend looking at
cogito as
the place to start (eg.
apt-get install cogito
)
if you know nothing
about git and want to do version-control things with it. I have
a few notes on another page.
- BitKeeper
- what the linux kernel community used to use. There was eternal
license-related flamewar. Abandoned in favour of git. distributed/offline
working. push/pull (?mail).
- Mercurial -
don't know much about this
I've become more interested recently in open source development process.
I've kept half an eye pointed at the linux (kernel) project since about
1996 and sent in occasional patches for other bits of software; the
Globus Toolkit was the first big
project that I work intensively on and for that I'm still keeping
an eye on globdev, part of which
is attempting to open up the development process a little bit more.
Exposure to stg and darcs have altered my way of thinking about
distributed open source development, to have a lot more respect for
patches, and for the idea that work should be presented as a (possibly
singleton) series of patches that elegantly describe the work.
Something that's interesting perhaps is that its a combination of
technical issues and social issues, tied closely together (for example,
the choice of SCM can strongly influence the development workflow in
adverse ways (a pet peeve being centralised repositories)).
Wikipedia has a List of revision control software.