The structure of the version graph is based on the following principles:
A version graph consists of one or more versions.
A version graph has exactly one root version.
The root version does not have a predecessor version.
All other versions (apart from the root version) have one or more predecessors (merges are allowed).
Each version may have one or more successors (branches are allowed).
A version cannot be one of its own successors or predecessors. The version graph is a directed acyclic graph.