# Control de versions

En informàtica, el Control de versions (en anglès VCS, Version Control System ) consisteix en la gestió de canvis en arxius i directoris en el temps. Permet revertir un arxiu a una versió anterior, comparar canvis en el temps, veure qui ha realitzat determinats canvis, etc. Existeixen diversos sistemes: els sistemes locals, els centralitzats i els distribuïts. Els sistemes de control de versions locals registren totes les modificacions en el mateix disc. Els sistemes centralitzats tenen un únic servidor amb totes les versions i permet que persones que treballin en el mateix projecte es puguin descarregar l'última versió al seu ordinador per a treballar-hi. Exemples d'aquest tipus de sistema són CVS, Subversion, i Perforce. En els sistemes distribuïts, en canvi, els clients no només es descarreguen l'última versió sinó tot el conjunt de versions. Així, si el servidor central falla, es poden recuperar totes les versions de qualsevol ordinador que hi treballi. Exemples d'aquest sistema són Git, Mercurial, Bazaar o Darcs.

## Terminologia habitual

La terminologia pot variar d'un sistema a un altre, però alguns termes d'ús comú:
| Català | Anglès | Descripció |
| Línia de base | Baseline | Una revisió aprovada d'un document o fitxer font al qual es poden fer canvis posteriors. Vegeu línies de base, etiquetes i etiquetes. |
| Branca | Branch | Un conjunt de fitxers sota control de versions es pot ramificar o bifurcar en un moment determinat de manera que, a partir d'aquest moment, es puguin desenvolupar dues còpies d'aquests fitxers a velocitats diferents o de maneres diferents, independentment les unes de les altres. Aquesta línia alternativa de desenvolupament pot continuar sense alterar la línia principal. |
| Canvi | Change | Un canvi (o diff, o delta) representa una modificació específica a un document sota control de versió. La granularitat o mida de la modificació considerada un canvi, varia entre els sistemes de control de versions. |
| Llista de canvis | Change list | En molts sistemes de control de versions amb confirmacions atòmiques de canvis múltiples, una llista de canvis (o CL), conjunt de canvis, actualització o un pedaç (patch) identifica el conjunt de canvis realitzats en una sola confirmació. Això també pot representar una vista seqüencial del codi font, que permet examinar la font a partir de qualsevol identificador de llista de canvis concret. |
| Sortida | Checkout (abreujat: co) | Fer la sortida és crear una còpia de treball local des del dipòsit. Un usuari pot especificar una revisió específica o obtenir-ne la darrera. Habitualment quan s'ha extret un fitxer des d'un servidor de fitxers compartit, altres usuaris no poden editar-lo. En anglès el terme "checkout" també es pot utilitzar com a substantiu per descriure la còpia de treball. El terme també te relació amb la sortida dels hotels de manera que quan es fa la sortida ja no hi ha accés a les seves comoditats. |
| Clonar | Clone | Clonar significa crear un dipòsit que contingui les revisions d'un altre dipòsit. Això equival a empènyer o tirar a un repositori buit (recentment inicialitzat). Com a substantiu, es pot dir que dos repositoris són clons si es mantenen sincronitzats i contenen les mateixes revisions. |
| Confirmació | Commit | Fer una confirmació (entrar, instal·lar, enviar o gravar) és escriure o fusionar els canvis fets a la còpia de treball al repositori. Els canvis queden consolidats. Els termes "commit" i "checkin" també es poden utilitzar com a substantius per descriure la nova revisió que es crea com a resultat de la confirmació. |
| Conflicte | Conflict | Es produeix un conflicte quan diferents parts fan canvis al mateix document o registre i el sistema no pot conciliar els canvis. Un usuari ha de resoldre el conflicte combinant els canvis o seleccionant un canvi a favor de l'altre. |
| Compressió Delta o Diferencial | Delta compression | La majoria dels programes de control de revisions utilitzen la compressió delta -per la lletra grega-, que només conserva les diferències entre versions successives de fitxers. Això permet un emmagatzematge més eficient al registrar els canvis enlloc del document complert. |
| Flux dinàmic | Dynamic stream | Un flux en què algunes o totes les versions de fitxers són rèpliques de les versions del flux principal. |
| Exportació | Export | Exportar és l'acte d'obtenir els fitxers del dipòsit. És similar a la sortida (checkout), tret que crea un arbre de directoris net sense les metadades de control de versions que s'utilitzen en una còpia de treball. Sovint s'utilitza abans de publicar el contingut o com a còpia del resultat final, per exemple. |
| Recuperar, estirar, empènyer | Fetch, Pull, push | Copia les revisions d'un dipòsit a un altre. Estirar (Pull): És el dipòsit receptor qui inicia la còpia. Empènyer (Push): Es el dipòsit origen qui inicia la acció de còpia.. Recuperar (Fetch) s'utilitza de vegades com a sinònim de empènyer la còpia, i d'altres com a sinònim de estirar (Pull) seguit d'una actualització del repositori. |
| Integració cap endavant | Forward integration | El procés de combinar els canvis realitzats (una característica o millora) al tronc principal en una branca de desenvolupament. |
| Cap o inici | Head / Tip | En aquest context, es refereix a la confirmació més recent, ja sigui al tronc de la versió o a una branca. El tronc i cada branca tenen el seu propi cap o inici, tot i que, de vegades, el cap s'utilitza de manera fluixa per referir-se al tronc. |
| Importar | Import | Fet de copiar un arbre de directoris local (que actualment no és una còpia de treball) al dipòsit per primera vegada. |
| Inicialitzar | Initialize | Crear un repositori nou i buit. |
| Intercalats diferencials / intercalats delta | Interleaved deltas | Alguns programes de control de revisions utilitzen delta intercalats, un mètode que permet emmagatzemar l'historial de fitxers de manera conjunta per a totes les versions en un sol bloc. Es va dissenyar principalment per a fitxers de text orientats a línia de codi. |
| Etiqueta | Label / Tag | Una etiqueta (label / tag) fa referència, en aquest context, a una instantània important en el temps, a la qual se li afegeix un nom o un nombre de revisió fàcil d'utilitzar i significatiu. La instantània amb la etiqueta identificativa pot consistir en un grup de fitxers. Vegeu també línies de base. |
| Bloqueig | Locking | Quan un desenvolupador bloqueja un fitxer, ningú més el pot actualitzar fins que no es desbloqueja. El bloqueig es pot implementar mitjançant el sistema de control de versions o mitjançant comunicacions informals entre desenvolupadors. |
| Línia principal | Mainline | Similar al tronc, però hi pot haver una línia principal per a cada branca. |
| Fusionar | Merge | Una fusió o integració és una operació en què s'apliquen dos conjunts de canvis a un fitxer o conjunt de fitxers. En alguns casos, la combinació es pot realitzar automàticament, ja que hi ha prou informació de la història per reconstruir els canvis i aquests canvis no entren en conflicte. En altres casos, una persona ha de decidir exactament què han de contenir els fitxers resultants. Moltes eines de programari de control de revisions inclouen funcions de combinació. Exemples d'escenaris: • Un usuari, que treballa en un conjunt de fitxers, actualitza o sincronitza la seva còpia de treball amb els canvis realitzats, i la registra al dipòsit altres usuaris. • Un usuari intenta comprovar els fitxers actualitzats per altres persones des que es van retirar els fitxers i el programari de control de revisions fusiona automàticament els fitxers (normalment, després de demanar-li a l'usuari si ha de procedir a la combinació automàtica només ho fa si la combinació es pot resoldre de manera clara i raonable). • Es crea una branca, el codi dels fitxers s'edita independentment i la branca actualitzada s'incorpora posteriorment a un tronc únic i unificat. • Es ramifica un conjunt de fitxers, un problema que existia abans que es fixés la ramificació en una branca i, després, la solució es fusiona amb l'altra branca. (Aquest tipus de combinació selectiva de vegades es coneix com a selecció de cireres (cherry pick) per distingir-la de la combinació completa en el cas anterior). |
| Promoure | Promote | L'acte de copiar contingut de fitxers des d'una ubicació menys controlada a una ubicació més controlada. Per exemple, des de l'espai de treball d'un usuari fins a un dipòsit o des d'un flux fins al seu pare. |
| Repositori / Dipòsit | Repository / Depot / Repo | El repositori (o "repo") és on s'emmagatzemen les dades actuals i històriques dels fitxers, sovint en un servidor de fitxers o una base de dades. De vegades també s'anomena dipòsit. |
| Resoldre | Resolve | Acte d'intervenció de l'usuari per abordar un conflicte entre diferents canvis al mateix document. |
| Integració inversa | Reverse integration | El procés de fusió de diferents branques d'equips al tronc principal del sistema de versions. |
| Revisió / versió | Revision / Version | Una versió és qualsevol canvi del fitxer o fitxers. Al programari SVK, una revisió és l'estat en un moment de tot l'arbre del dipòsit. |
| Comparteix | Share | Acció de fer que un fitxer o carpeta estigui disponible en diverses branques alhora. Quan es canvia un fitxer compartit en una branca, queda canviat per la resta de branques. |
| Flux de dades | Stream | Contenidor per a fitxers ramificats que té una relació coneguda amb altres contenidors d'aquest tipus. Els fluxos formen una jerarquia; cada flux pot heretar diverses propietats (com versions, espai de noms, regles de flux de treball, subscriptors, etc.) del seu flux principal. |
| Tronc / Línia base / Línia principal / Mestre | Trunk / Baseline / Mainline / Master | L'única línia de desenvolupament que no és una branca. |
| Actualització | Update | Una actualització combina els canvis fets al dipòsit (per altres persones, per exemple) a la còpia de treball local. Es pot parlar de sincronització del dipòsit també, ja que pot significar un push i pull combinat. Actualització també és el terme que utilitzen algunes eines CM (CM +, PLS, SMS) per al concepte de paquet de canvis (vegeu llista de canvis). Sinònim de finalització (checkout) en sistemes de control de revisió que requereixen que cada dipòsit tingui exactament una còpia de treball (habitual en sistemes distribuïts). |
| Desbloquejar | Unlocking | Alliberar un bloqueig. |
| Còpia de treball | Working copy | La còpia de treball és la còpia local dels fitxers d'un dipòsit, en un moment o revisió específics. Tot el treball realitzat als fitxers d'un dipòsit es realitza inicialment en una còpia de treball, d'aquí el seu nom. Conceptualment, és un sandbox. |
| Entorn de proves | Sandbox | Un entorn en què els desenvolupadors o editors de programari poden crear i provar contingut nou, a part d'altres continguts del projecte. |
| Directori de treball | Working directory | El directori de treball són els fitxers que veieu al sistema de fitxers de l'ordinador. Quan obriu els fitxers del projecte en un editor de codi, esteu treballant amb fitxers al directori de treball. Això contrasta amb els fitxers que s'han desat (al publicar commit) al dipòsit. |
| Petició de descàrrega | Pull request | Un desenvolupador que demana als altres que recullin els seus canvis entregats al repositori (push) |
| SHA | | "SHA" és una abreviatura de "Secure Hash Algorithm". Un SHA, en aquest context, és bàsicament un número d'identificació per a cada confirmació. És una cadena de 40 caràcters composta de caràcters (0–9 i a – f) i calculada a partir del contingut d'una estructura de fitxers o directoris a Git. A continuació, es mostra el SHA d'un commit: e2adf8ae3e2e4ed40add75cc44cf9d0a869afeb6. |
| Àrea de posada en escena / Índex de posada en escena / Índex | Staging Area / Staging Index / Index | Un fitxer del directori Git que emmagatzema informació sobre què entrarà a la vostra pròxima confirmació. Es pot pensar en l'àrea de posada en marxa com una taula de preparació on Git prendrà la propera confirmació. Els fitxers de l'índex de fase estan preparats per afegir-se al dipòsit. |

## Referències

* ↑ Chacon i Straub, 2009.

## Bibliografia

* Chacon, Scott; Straub, Ben. Pro Git (en castellà). Apress, 2009. Arxivat 2014-12-08 a Wayback Machine.
* Collins-Sussman, Ben; Fitzpatrick, Brian W.; Pilato, C. Michael. Version Control with Subversion (en anglès), 2011.