Version control, also known as revision control, allows developers to track and manage changes to source code over time. It provides a logical way to organize and control revisions. This can be especially important for large and complex projects, where multiple developers may be working on the same codebase simultaneously.
Tracking revisions allows teammates to collaborate on development with others. It makes it easier to compare revisions, roll back changes that cause problems, merge changes made by different team members, and keep a history of changes made.
Changes are usually identified by a number or letter code, and are associated with a timestamp and person making the change.
How are changes made?
Changes can be structured in a variety of ways. One of the most common ways starts by first retrieving a copy of the data in the revision control system (or repository). When the data is "checked out" by being retrieved, the developer will now have a working copy of the data that they will be able to modify. However, this copy will not be reflected in the revision control system until is it committed, or "checked in".
Centralized vs. Distributed Version Control
Revision control systems are often centralized, with a single authoritative repository. A single central repository is used to store all the files and changes to those files for a project. Check outs and check ins all reference this central repository.
Alternatively, in distributed control systems, there's no single authoritative repository. Instead, data can be checked out and cheked into any repository. Each developer has a local copy of the entire repository, including the full history of the project. They can work on the project locally and commit changes to their own local repository before pushing those changes to a central server or repository.