This document describes the purpose of versioning and version control software.
Copyright and Language can be found in RFC1
This document is governed by the Consensus-Oriented Specification System (COSS).
In addition to the language defined in RFC1, DOCUMENT refers to any digital content, including but not limited to files and folders.
Versioning serves exactly two purposes; tracking change and maintaining referential integrity.
_____________ | | | document1 | |_____________| | ______|______ | | | document2 | |_____________| | ______|______ | | | document3 | |_____________|
document2 references/depends on
document1; i.e. if
document1 changes, so does
graph such as this may grow indefinitely and with it the difficulty in assuring that the
link inbetween each DOCUMENT remains valid; this is called maintaining referential integrity.
_____________ | | ________| document1 |_______ | |_____________| | | | | _____|______ ______|______ _____|______ | | | | | | | state1 | | state2 | | state3 | |____________| |_____________| |____________| | ______|______ | | | document3 | |_____________|
Each change to DOCUMENT may be referred to as a
state of said DOCUMENT. Here,
document1 provides one or more instances of
state, each produced at various stages of development, however
document3 only references
state is the main mechanism with which to track change.
Exactly two (2) versioning patterns exist followed by variations of each;
Monolithic versioning, DOCUMENT is continuously overwritten and changes to any given DOCUMENT may be optionally tracked external to said DOCUMENT; this may be referred to as
Polylithic versioning, each change to DOCUMENT is made explicit, requiring references to each DOCUMENT to be manually maintained; this may be referred to as
In implicit tracking, a DOCUMENT is de-coupled from changes to referenced DOCUMENT; the change is said to be implicit and the
update process said to be automatic or implied.
In explicit tracking, a DOCUMENT is tightly coupled and maintains reference to a fixed
state and any
update handled manually; either via user intervention or external mechanisms, such as Version Control Software (VCS).
Maintaining referential integrity and tracking change is a major undertaking and yet vital to any project involving more than a single worker. That is why there are companies out there focusing solely on providing the best approach to the variety of scenarios requiring versioning.
Examples of Version Control Software providing a
Monolithic method of versioning include Git, Subversion and Perforce.
Polylithic version control software however is far less common and is mainly developed ad-hoc in productions that require them.