The Past¶
Version control systems predating git are based on a client/server model. Clients are publishing changes on a central server and also downloading them from this central server.
If the client can’t establish a connection to the server no code snapshot can be created
Before creating a snapshot the local state has to be updated to include the latest changes from the server
Only the server has all (meta) information about the code and it’s changes
flowchart LR A(Client A) <--> S[(Server)] B(Client B) <--> S
This architecture has serious consequences:
Not possible to create snapshots when being offline
Without a connection to the server snapshots and their changes can’t be inspected
Developers tend to publish their changes at the end of the work day
Incomplete or even broken features are published and downloaded
Code changes in single snapshots are rather big
Big snapshots are error prone to conflicts
If the server crashes and no backup of the server is available the whole history of snapshots is lost