The Versioned Filesystem

Subversion's versioned filesystem is a temporally ordered sequence of discrete snapshots of the state of a tree of nodes. These immutable snapshots are called revisions. The initial revision (Revision 0) contains exactly one node, the root directory. The last, or youngest revision, is called the HEAD.

Beside this sequence of immutable revisions, the filesystem can contain an arbitrary number of transactions, which are mutable snapshots that have no successors and whose predecessors (base revisions) are immutable. The only way to create a new revision is to merge the tree mutations described by a transaction into the HEAD tree and append the result to the revision sequence, thereby creating a new HEAD (in other words, rebase the transaction to HEAD and make it immutable).


<<EmbedObject(fs2-tree-view.svg)>>

Nodes are either files, which are containers of unstructured data, or directories, which are lists of named files and directories. The root node of this tree is always a directory.

Within any single revision, each node (except the root) will have exactly one parent. However, successive revision trees are not independent and a node may trace its history across many revisions. A node revision is the projection of one branch of a node's history in a particular revision; it can have at most one predecessor in an earlier revision and any number of successors in later revisions.

For example, in the following diagram we have four revisions of the node tree containing 15 node revisions, but only 4 distinct nodes:

vfs-node-history.svg]]

  • No labels