16
ever a conflict occurs. In software engineering, an additional level of locking is usually
performed so that the creation of a new branch requires manual intervention, and lock-
ing (checkin/checkout) is used to ensure that the linear history of each branch is con-
vergent.
• Multiple states with merge.This variation is similar to multiple branching states, with the
addition of mergedversions. The relationships of individual states form a general acyclic
graph, since separate branches can be reunited by merging two distinct versions. CVS
implements a divergent version of the branching model, where locking is not performed,
and automatic merge operations replace explicit conflict prevention. Contexts(Delisle
and Schwartz 1987)are one way to extend this model to deal with traditional node and
link hypertext databases.
• Arbitrary state sets.This allows for essentially arbitrary histories, by treating operations
as first class objects, rather than just the states they create. Systems typically create
such histories by supporting out-of-sequence updates, undo of arbitrary operations, or
unrestricted merge operations. In the most general case any group of operations can be
construed as defining a state, whose relationships may be implicitly or explicitly man-
aged. Systems often impose restrictions on allowed operation sets, or make significant
performance tradeoffs on what combinations are likely. Since states are relatively uncon-
strained, divergence in this kind of system can be a general rule, as syntactic consis-
tency does not significantly constrain forms of divergence.
The variety of systems that have experimented with arbitrary state sets is quite great.
The earliest example, to my knowledge, is an unnamed system described in (Elliot, Potas et
al. 1971). This system, intermediate in time between the HES and FRESS systems(DeRose
and Dam 1999), also developed at Brown University, included revision tracking, storage of an
arbitrary amount of editing history, the selective disabling of changes regardless of their
temporal sequence and editing operations like move and copy. The fact that collaborators
ever a conflict occurs. In software engineering, an additional level of locking is usually
performed so that the creation of a new branch requires manual intervention, and lock-
ing (checkin/checkout) is used to ensure that the linear history of each branch is con-
vergent.
• Multiple states with merge.This variation is similar to multiple branching states, with the
addition of mergedversions. The relationships of individual states form a general acyclic
graph, since separate branches can be reunited by merging two distinct versions. CVS
implements a divergent version of the branching model, where locking is not performed,
and automatic merge operations replace explicit conflict prevention. Contexts(Delisle
and Schwartz 1987)are one way to extend this model to deal with traditional node and
link hypertext databases.
• Arbitrary state sets.This allows for essentially arbitrary histories, by treating operations
as first class objects, rather than just the states they create. Systems typically create
such histories by supporting out-of-sequence updates, undo of arbitrary operations, or
unrestricted merge operations. In the most general case any group of operations can be
construed as defining a state, whose relationships may be implicitly or explicitly man-
aged. Systems often impose restrictions on allowed operation sets, or make significant
performance tradeoffs on what combinations are likely. Since states are relatively uncon-
strained, divergence in this kind of system can be a general rule, as syntactic consis-
tency does not significantly constrain forms of divergence.
The variety of systems that have experimented with arbitrary state sets is quite great.
The earliest example, to my knowledge, is an unnamed system described in (Elliot, Potas et
al. 1971). This system, intermediate in time between the HES and FRESS systems(DeRose
and Dam 1999), also developed at Brown University, included revision tracking, storage of an
arbitrary amount of editing history, the selective disabling of changes regardless of their
temporal sequence and editing operations like move and copy. The fact that collaborators