Real Versions and Virtual Versions
The difference between the Keep and Promote commands highlights an important aspect of the way that AccuRev organizes and manages development data. It also highlights the difference between backing streams and workspace streams.
Real Versions
All 'real' development — both content changes and namespace changes — takes place in workspaces, not in dynamic streams or reference trees. The following commands create a new real version of some element in the built-in workspace stream of some AccuRev workspace.
- Keep
- Rename (or cut-and-paste)
- Defunct
- Undefunct (CLI only)
- Merge (ends by performing a Keep)
- Revert (ends by performing a Keep)
- Paste (after a copy, creating a link; CLI command: ln)
Virtual Versions
Unlike the commands listed above, the Promote command does not record a change to the contents or pathname of any element. Rather, it makes an existing real version available in a new location: a particular dynamic stream. The version that Promote creates in a dynamic stream is called a virtual version; a new virtual version is a pointer to, or alias for, an existing real version in some workspace stream.
Virtual Versions in Workspace Streams
The commands Send to Workspace and Anchor are special. They create a new version in a workspace stream, but the new version is virtual, not real. Why? It's for consistency with the above descriptions of real and virtual versions:
- These commands do not preserve a development change, so it doesn't make sense to create a new real version.
- These commands make an existing real version available in a new location: a particular workspace — so it makes sense to record the action as a virtual version.