Version control system tools
A software development is modified thousand times during his lifetime, therefore a tool to control the distinct versions is required in this process.
In most of the software products, the development team is numerous, therefore the control of the distinct versions can not be manual because a lot of mistakes can be committed and the cost would be very high.
¿How to store the distinct versions?
The version control systems (VCS) can be classiffied in how the code is stored. We have two kinds of systems:
Centralized systems. The management in these systems is easier. The repository is unique and all the code will be stored in it. If the software needs to split into branches, a person in charge has to approve it. The control in this systems is higher and often the version number is unique. This system is not very flexible so, many times, developpers tends to use others configurations.
Distributed systems. In this systems, each programmer has a whole copy of the repository.
The advantage is that in case of crash, many copies are available to restore the repository. In the main server, the last official copy is stored.
When the developer team want to work with unstable versions, the distributed systems is a better choice than centralized systems. When an unstable version became stable, the responsible will upload it to the repository.
Distributed systems are used when the developer wants to improve certain modules or wants to add new functions to the software. Another advantage is that the server can be a normal computer because all the programmers have their own copy in their computers.
Kinds of colaboration in version control systems
Generally, there are two kinds of collaboration in a version control system (VCS). The easiest one is working with the system in exclusive mode. A lot of times, a unique user is responsible of a module or a single program. When the programmer is modifying that code, the system blocks the access until the user uploads the program. That new software is free to use for the others users.
The other way is to work in a collaborative way. Working in a collaborative way implies that each user has his own local copy. When he finishes the changes, he uploads the software to the common repository. Sometimes, conflicts happen when users work in this way, therefore coordination is very important.
Centralized workflow. It is an old-fashioned workflow. There is only a main server in the system, and the users will publish their code in it. It works in exclusive mode. The same code can be modified by only one user.
Integration-manager workflow. Occasionally, an integration manager is used to have more control over the distinct versions of the project. The integration manager use to be a member of the team. He works as a traffic cop. The developers update their code and the integration manager stores that code in the common repository. This system is used in distributed SCV.
Workflow with dictator and lieutenants. This workflow is only used in massive projects (like in the linux kernel). It is the evolution of the former workflow. In big projects there are several persons in charge called lieutenants and a person called dictator that updates in the repository all the information sent by the lieutenants.
All the developers have access to the repository in order to clone it and to have their own copy.