In the beginning of times, there were centralized version control systems (SVN
and Perforce
are examples). This means that there is a server somewhere that contains all our code and the history of all the changes. If someone needs to work on that codebase they do a checkout
(typically of the main branch) and they will get the newest version of all the files.
If the server looks something like this (Every letter represents a different commit):

When a developer checks out main
, they will get only the files at D
, the commit history exists only in the server.
This has a two main disadvantages:
- It is not possible to create local branches. If a developer needs a branch they have to push it to the server
- If the server explodes, all the history is lost