About Version Control
About Version Control
Version control is a system that records changes to a file or set of files over time
so that you can recall specific versions later. Not just software source code.
One of the most popular VCS tools was a system called RCS, which is still
distributed with many computers today. RCS works by keeping patch sets (that
for collaboration
ex, CVS, Subversion, and Preforce
This setup offers many advantages, especially over lcoal VCSs. For example,
everyone knows to a certain degree what everyone else in the project is doing.
Administrators have fine-grained control over who can do what, and it's far easier
to administer a CSCS than it is to deal with local databases on every client.
However, this setup also has some serious downsides. The most obvious is the
single point of failure that the centralized server represents. If that server goes
down for an hour, then during that hour nobody can collaborate at all or save
versioned changes to anything they're working on. If the hard disk the central
About Version Control 2
database is on becomes corrupted, and proper backups haven't been kept, you
lose absolutely everything - the entire history of he project except whatever
single snapshots people happen to have on their local machines. Local VCS
systems suffer from this same problem - whenever you have the entire history of
the project in a single place, you risk losing everything.
Git doesn't think of its data this way. Instead, the data is more like a series of
snapshots of a miniature filesystem.
Every time you commit, or save the state of your project, Git basically takes a
picture of what all your files look like at that moment and stores a reference to
that snapshot. To be efficient, if files have not changed, Git doesn't store the file
again, just a link to the previous identical file it has already stored. Git thinks
about its data more like a stream of snapshots.