A version control system is a piece of software that helps the developers on a software team work together and also archives a complete history of their work.
There are three basic goals of a version control system (VCS):
We want people to be able to work simultaneously, not serially.
Think of your team as a multi-threaded piece of software with each developer running in his own thread. The key to high performance in a multi-threaded system is to maximize concurrency. Our goal is to never have a thread which is blocked on some other thread.
When people are working at the same time, we want their changes to not conflict with each other.
Multi-threaded programming requires great care on the part of the developer and special features such as critical sections, locks, and a test-and-set instruction on the CPU. Without these kinds of things, the threads would overwrite each other’s data. A multi-threaded software team needs things too, so that developers can work without messing each other up. That is what the version control system provides.
We want to archive every version of everything that has ever existed — ever.
And who did it. And when. And why.