You are here

Replace CVS with SVN on www.inf

Project ID: 
Current stage: 

The bulk of the content on www.inf is managed via CVS. This is rather old and not as feature rich as Subversion (SVN). In most cases a person familiar with 'cvs' commands from the command prompt can just replace them with 'svn'. If we do consider changing to SVN, we need to make sure the various existing CVS hooks (eg validation), authorisation and publishing via the web continue to work.

The same service and functionality that we have at the moment with CVS but using SVN instead.

Improved authentication via SVN and Cosign, to replace the weak security of CVS pserver.

Preserved CVS history and revisions.


Customer: web publishers to www.inf, and some of these are automated database driven commits.

Case statement:
Most teaching material is published using CVS, a version control system that is getting a bit long in the tooth, and this should be ported to SVN. CVS can take considerable time (for instance, SVN is much quicker when changing directory structure).

Improved authentication is something we should have looked at ages ago.


Status: Proposal

Timescales: estimate 3 weeks

Priority: Depends on who you ask - there's no urgency from the service point of view, unless doing away with pserver is seen as urgent, though an alternative would be to switch to cvs + ssh

A possible additional feature to do as part of this work would be to flag content that staff want to store in the repository, but not publish on the web
(see RT 60294).





  • A test service.
  • Computing staff time.

As well as replacing CVS with SVN we need to inform users of the service how to switch, so resources are needed to provide (possibly) migration tools, and certainly we'd need to track down and replace all documentation detailing how to use CVS with SVN.

All users would have to do a final commit of any outstanding CVS edits, then the CVS service removed and replaced with SVN, before web publishing could resume. Users would have to checkout a new SVN working copy of their web pages.

The migration would need to preserve the CVS history and revisions so that historical checkouts and comparisons could still be done.

There are tools to assist with migration, such as cvs2svn, and other web resources.

Basic plan might be something like:

  • Install cvs2svn
  • Stop CVS uypdates ("freeze" repository)
  • Copy the CVS repository from the CVS server to SVN server
  • Use cvs2svn to create dumpfile of CVS repository
  • Create svn repository
  • Load the dumpfile into new SVN repository
  • Verify (test) the svn repository created
  • Check access svn from a remote machine
  • Test client
  • Check/add pre-commit hooks and post-commit hooks
  • Point users at SVN repository

Note that cvs2svn assumes a one-time use to convert a CVS repository to SVN, although various transformations can be applied during this process. It isn't suited to separate, partial migrations of a CVS repository to SVN. It doesn't create a persistent record of which CVS version relates to which SVN revision number, so if only parts of CVS are converted at a time, branching information will be lost. CVS modules can, however, be converted one at a time.



  • subversion and component
  • cosign

Risks: Inability to publish to the www.inf while the migration was happening.

We miss some automated process or publishing mechanism that is no longer able to publish as it hasn't been switched to using SVN

Confusion caused by the change in technology.

What if, sometime after the migration, we discover some problem/flaw. Can we revert back to CVS again preserving the revisions/history that may have been made via SVN in the mean time?


Proposed date Achieved date Name Description