Versioining Basics

Will Holcomb

16 January 2010

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."