# CVS

Prové de l'anglès i és l'acrònim de Concurrent Versions System (Sistema de Control de Versions, en català) o Concurrent Versioning System. Es tracta d'un sistema que manté un registre de tot el treball realitzat i els canvis en la implementació d'un projecte (de programa) i que permet que diferents desenvolupadors (potencialment separats per grans distàncies) col·laborin junts.
Els sistemes de control són utilitzats principalment a la indústria del programari per controlar les diferents versions del codi font. Tot i això, els mateixos conceptes són aplicables a altres àmbits (i no només pel codi font) com la generació de documents, imatges, etc. En el món del programari lliure s'ha fet molt popular entre els desenvolupadors de codi obert, que treballen amb el CVS difós sota la llicència GPL.

## Característiques

Un sistema de control de versions ha de proporcionar:
* Un mecanisme d'emmagatzematge de cadascun dels ítems que s'ha de gestionar (arxius de text, imatges, documentació...)
* La possibilitat de modificar, moure i esborrar cadascun dels elements.
* Un històric de les accions realitzades amb cada element, i la possibilitat de tornar a un estat anterior dins d'aquest historial.
Tot i que no és estrictament necessari, sol ser molt útil la generació d'informes amb els canvis introduïts entre dues versions, informes d'estat, identificats amb números de versions...
CVS utilitza una arquitectura client-servidor: un servidor guarda la versió o versions actuals del projecte i la seva història, i els clients es connecten al servidor per extreure una còpia completa del projecte, treballar amb aquesta còpia i posteriorment afegir els canvis realitzats. Típicament, el client i el servidor es connecten a través d'Internet, però també poden executar-se els dos alhora a la mateixa màquina en el cas que es vulgui que el CVS mantingui el registre de la història de les versions del programa d'un projecte dut a terme només per desenvolupadors locals. El servidor normalment utilitza un sistema operatiu similar a Unix, mentre que els clients del CVS poden funcionar amb qualsevol dels sistemes operatius (veure sistema operatiu) que hi ha al mercat.
Com que diversos clients poden extreure o poden estar treballant amb còpies del projecte al mateix temps, a l'hora de guardar els canvis el sistema tracta de fusionar-les. Si aquest procés falla, perquè, per exemple, dos clients canvien la mateixa línia en un fitxer en concret, el fitxer denega el segon ingrés i informa al client sobre el conflicte, que l'usuari haurà de resoldre de forma manual. Si l'operació de fusió té èxit, aleshores el número de versió de tots els fitxers implicats s'incrementa automàticament i el servidor CVS escriu una línia amb una descripció subministrada per l'usuari, la data i el nom de l'autor i els seus fitxers log.
Els clients poden també comparar diferents versions dels fitxers, sol·licitant una història completa dels canvis, o extreure una "foto" històrica de com es trobava el projecte en una data concreta o en un número de revisió determinat, tal com passa en molts projectes de codi obert on es permet l'"accés de lectura anònim" (que vol dir que els clients poden obtenir versions i comparar-les sense necessitat de tenir cap privilegi sobre els fitxers).
Els clients també poden utilitzar la comanda d'actualització amb l'objectiu de tenir les seves còpies al dia amb l'última versió que es troba al servidor. D'aquesta manera s'estalvia haver de tornar a descarregar el projecte complet.
El CVS també pot mantenir diferents "branques" d'un projecte. Per exemple, es pot utilitzar una versió ampliada d'un projecte de programa pot formar una branca, i utilitzar-la per corregir errors, mentre en una altra branca es fa servir una segona versió per anar-la desenvolupant, afegint canvis i noves característiques.

## Terminologia

La terminologia CVS denomina, mòdul a un projecte simple (conjunt relacionat de fitxers) gestionat pel CVS. S'utilitza el terme repositori per referir-se al conjunt de mòduls que pot gestionar el CVS. La còpia descarregada per un client serveix com a còpia de treball.

## Vegeu també

* Subversion
* Git

## Referències i enllaços externs

* http://losinvisibles.net/como/comoCvs.html Arxivat 2006-03-13 a Wayback Machine.
* http://olea.org/manuales/como-empezar-cvs/
* http://es.wikibooks.org/wiki/Tutorial_de_uso_de_CVS
* http://www.cvshome.org/docs/ Arxivat 2004-04-02 a Wayback Machine. (anglès) (Documentation at CVSHome.org)
* http://cvsbook.red-bean.com/cvsbook.html (anglès) (Karl Fogel: Open Source Development with CVS)
* http://www.cvshome.org (anglès)
* http://www.loria.fr/~molli/cvs-index.html (anglès)