Versioining systems are pieces of software that track changes in files. They exist in a variey of forms, and one of the more popular currently is git which was designed for maintaining the Linux kernel.
The basic building blocks of a git repository are "blobs." In git, a blob is simply a file:
Blobs are organized into trees which encode hierarchical relationships between blobs:
Versioning takes place as "commits" which capture a snapshot of a tree and the associated blobs:
As the user adds, removes and edits blobs and subtrees, these changes are captured in the progression of commits:
Commits don't have to progress linearly. When multiple sets of changes originate from a common ancestor, this is known as a "branch."
Often multiple changes from a branch are later recombined in a "merge."