L’objectiu de les enginyeries és arreglar problemes per fer més fàcil la vida de la gent. Sigui un pont per creuar un riu o un navegador web qualsevol projecte té un cos de coneixement que tots els membres de l’equip de desenvolupament han de compartir. Definim una versió com l’estat de les dades d’un projecte a un cert moment en el temps. Així entendrem un sistema de control de versions (SCV) com una eina informàtica per facilitar el progrés i la feina en equip durant el progrés d’un projecte.
Sigui un conflicte una situació inconvenient on dos membres distints estan modificant la mateixa secció del treball. El problema dels conflictes és que potser les noves dades no són fàcilment integrables al conjunt global del projecte. Entenem resoldre un conflicte com el procés d’arreglar un conflicte. Existeixen algorismes que automàticament superen un conjunt de situacions de conflicte però hi ha casos on hauran de ser els propis desenvolupadors qui busquin solució al conflicte. Els sistemes i mètodes de resoŀlució de conflictes són un dels principals punts distintius entre els diferents sistemes de control de versions.
Anomenam repositori al conjunt de dades del projecte. Dins el repositori desam documentació, dades estadístiques, codi font, jocs de proves o qualsevol element útil per l’èxit del projecte. Cadascun dels desenvolupadors i participants tindrà accés a les distintes seccions del repositori per poder executar les seves tasques. Sobre aquest repositori els desenvolupadors aniran afegint el material i creant distintes versions, escrivint així un historial de tot el treball fet al llarg del desenvolupament.
L’historial del projecte és un recurs que es comporta com una màquina del temps. Tota dada, línia de codi o document que fiquem dins el sistema serà accessible al llarg del temps. D’aquesta manera no cal passar pena de repartir tasques o fer proves doncs sempre podrem recuperar la feina anterior. Experimentar és molt més agradable ja que el pitjor que podem fer és perdre l’estona i mai posarem en perill el repositori del projecte. Això no arregla el problema de les còpies de seguretat: hem de desar periòdicament el nostre repositori. El que el sistema de control de versions ens assegura és que podem llegir la versió de fa un mes, comparar-la amb la versió actual o saber qui va crear un fitxer concret.
Un dels avantatges de tenir un historial complet és poder usar-lo com informació d’entrada per extreure mètriques sobre el nostre projecte. Gràcies a que desam tota la informació rellevant des de l’inici del repositori és possible obtenir dades útils per tècniques pròpies de l’enginyeria: càlcul de costos, volum de feina per membre o temps aproximat de termini del projecte. Amb tècniques estadístiques es poden fer intents d’entendre els factors d’èxit d’un projecte o intentar pronosticar com anirà. Sense entrar en una discussió sobre la utilitat, certesa i precisió d’aquestes valoracions el fet de disposar de les dades és un punt tan important que cap projecte s’hauria de fer sense un sistema de control de versions.
Els dos principals paradigmes de sistemes de control de versions són el centralitzat i el distribuït. La seva major diferència consisteix en el grau de dependència que tenen els desenvolupadors i el repositori del projecte. Aquestes diferències són de caire tècnic però tenen conseqüències a nivell social i logístic. Els centralitzats es caracteritzen per tenir un sol repositori comú a tots els membres. En el cas dels distribuïts cada membre té una còpia de tot el conjunt de coneixement del projecte: cada participant és una illa en si mateix. Si cada desenvolupador té el nivell de flexibilitat de poder dirigir el projecte en la direcció que ell cregui es redueixen les complicacions jeràrquiques. Dins el camp de l’enginyeria aquest fet és positiu: les disputes es resolen per arguments científics i no socials.
La intenció d’aquest informe consisteix en fer una repassada tècnica al que són els sistemes de controls de versions, el flux de feina al llarg d’un projecte i les seves implicacions dins la ciència i en concret a l’enginyeria del programari. Els SCV tenen característiques que els fan molt interessants per qualsevol tipus de projectes, des del disseny i la planificació a l’enginyeria fins a la redacció de textos. Per acabar es repassa com influencia el SCV dins el desenvolupament de programari lliure i de com escollir un sistema descentralitzat pot significar un canvi radical a la manera de treballar.