In the beginning of times, there were centralized version control systems (
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