Subversion+ Versioning Model
April 1st, 2006Kevin Cochrane has posted a good 10,000 foot view of our plans for WCM. I thought I’d post a quick run down on one aspect of WCM that Jon Cox and I have been working on: an extended versioning model for the Alfresco Repository. Web Content Management is collection-oriented. That is, the fundamental unit of change is a group of concomitantly modified assets; raw html, xml records, images, pdf files, and stylesheets are typically worked on in a coordinated manner, and therefore need to be versioned in a coordinated manner. It’s useful to have the ability to view your repository in two complimentary ways: as a sequence of change sets, and as a sequence of directory “snapshots” (i.e: change set integrations). We plan upon implementing a system with Subversion-like semantics to accomplish this; ultimately, we’ll probably create something with svk-like semantics to handle distributed repositories, but more on that later.
Subversion’s versioning model is simple and powerful. A Subversion repository is a singly rooted filesystem-like store for which the root node of a repository can be accessed for any version of the repository; new versions of the repository are created at each ‘commit’ and ‘copy’ operation. This capability is the first critical characteristic of the Subversion model. Every time a developer ‘commits’ a set of files the whole repository is apparently versioned. Subversion performs these versioning operations in a parsimonious way. Using a lazy copy on write strategy, new physical versions are created only for changed leaf nodes and all their containing directories, recursively.
We are also introducing the concept of “layering,” which will give Alfresco a set of capabilities that are deeply useful for a number of WCM scenarios. In the next installment we’ll describe what layering is and what it’s good for.
No, this is not an April Fool’s day prank.
Posted by Britt Park