Francais | English | Espanõl

Control de versiones

De Wikipedia, la enciclopedia libre

Se llama control de versiones a la gestión de versiones (revisiones) de todos los elementos de configuración que forman la línea base de un producto o una configuración del mismo. Los sistemas de control de versiones facilitan la administración de las distintas versiones de cada producto desarrollado junto a las posibles especializaciones realizadas para algún cliente específico.

El control de versiones se realiza principalmente en la industria informática para controlar las distintas versiones del código fuente. Sin embargo, los mismos conceptos son aplicables a otros ámbitos y no sólo para código fuente sino para documentos, imágenes, etcétera.

Aunque un sistema de control de versiones puede realizarse de forma manual, es muy aconsejable disponer de herramientas que faciliten esta gestión (CVS, Subversion, SourceSafe, ClearCase, Darcs, Plastic SCM, GIT, etc.).

Tabla de contenidos

[editar] Características

Un sistema de control de versiones debe proporcionar:

  • Mecanismo de almacenaje de cada uno de los ítems que deba gestionarse (archivos de texto, imágenes, documentación...)
  • Posibilidad de modificar, mover, borrar cada uno de los elementos
  • Histórico de las acciones realizadas con cada elemento pudiendo volver a un estado anterior dentro de ese historial

Aunque no es estrictamente necesario, suele ser muy útil la generación de informes con los cambios introducidos entre dos versiones, informes de estado, marcado con nombre identificativo de la versión de un conjunto de ficheros, etcétera.

[editar] Clasificación

La principal clasificación que se pude establecer está basada en el almacenamiento del código:

  • Centralizados: existe un repositorio centralizado de todo el código, del cual es responsable un único usuario (o conjunto de ellos). Se facilitan las tareas administrativas a cambio de reducir la potencia y flexibilidad, pues todas las decisiones fuertes (como crear una nueva rama) necesitan la aprobación del responsable. Algunos ejemplos son CVS y SVN
  • Distribuidos: se aumenta la capacidad de decisión distribuida. Esto da más flexibilidad pero puede dificultar bastante la sincronización. Ejemplos: GIT y GNU Arch

[editar] Terminología básica

Todos los sistemas de control de versiones se basan en disponer de un repositorio, que es el conjunto de información gestionada por el sistema. Este repositorio contiene el historial de versiones de todos los elementos gestionados.

Cada uno de los usuarios puede crearse una copia local duplicando el contenido del repositorio para permitir su uso. Es posible duplicar la última versión o cualquier versión almacenada en el historial. Para modificar la copia local existen dos semánticas básicas:

  • Exclusivos: para poder realizar un cambio es necesario marcar en el repositorio el elemento que se desea modificar y el sistema se encargará de impedir que otro usuario pueda modificar dicho elemento. Este proceso se suele conocer como check out o desproteger.
  • Colaborativos: en el que cada usuario se descarga la copia la modifica y el sistema automáticamente mezcla las diversas modificaciones. El principal problema es la aparición de conflictos que deben ser solucionados manualmente o las posibles inconsistencias que surjan al modificar el mismo fichero por varias personas no coordinadas. Además, esta semántica no es apropiada para ficheros binarios.

Tras realizar la modificación es necesario actualizar el repositorio con los cambios realizados. Habitualmente este proceso se denomina commit, check in o proteger.

[editar] Vocabulario común

La terminología empleada puede variar de sistema a sistema, pero a continuación se describen algunos términos de uso común.<ref> Collins-Sussman, Ben, Fitzpatrick, B.W. and Pilato, C.M. (2004). Version Control with Subversion. O'Reilly. ISBN 0-596-00448-6.</ref><ref> Wingerd, Laura (2005). Practical Perforce. O'Reilly. ISBN 0-596-10185-6.</ref>

Línea base ("Baseline") 
Una revisión aprobada de un documento o fichero fuente, a partir del cual se pueden realizar cambios subsiguientes.
Rama ("branch") 
Un conjunto de ficheros bajo control de versiones puede ser branched o forked en un momento de tiempo de forma que, desde ese momento en adelante, dos copias de esos ficheros puedan ser desarrolladas a diferentes velocidades o de diferentes formas, de modo independiente.
"Check-out" ("checkout", "co") 
Un check-out crea una copia de trabajo local desde el repositorio. Se puede especificar una revisión específica, y por defecto se suele obtener la última.
"Commit" ("check-in", "ci", "install", "submit") 
Un commit sucede cuando una copia de los cambios hechos a una copia local es escrita o integrada sobre repositorio.
Conflicto 
Un conflicto ocurre cuando se realizan dos cambios por diferentes partes al mismo documento, y el sistema es incapaz de reconciliar los mismos. Un usuario debe resolver el conflicto combinando los cambios, o eligiendo uno de ellos para descartar el otro.
Cambio ("change", "diff", "delta") 
Un cambio representa una modificación específica a un documento bajo control de versiones. La granularidad de la modificación considerada un cambio varía entre diferentes sistemas de control de versiones.
Lista de cambios ("changelist", "change set", "patch") 
En muchos sistemas de control de versiones con commits multi-cambio atómicos, una lista de cambios identifica el conjunto de cambios hechos en un único commit. Esto también puede representar una vista secuencial del código fuente, permitiendo que el fuente sea examinado a partir de cualquier identificador de lista de cambios particular.
Exportación ("export") 
Una exportación es similar a un check-out, salvo porque crea un árbol de directorios limpio sin los metadatos de control de versiones presentes en la copia de trabajo. Se utiliza a menudo de forma previa a la publicación de los contenidos.
Importación ("import") 
Una importación es la acción de copia un árbol de directorios local (que no es en ese momento una copia de trabajo) en el repositorio por primera vez.
Integración ("merge") 
Una integración une dos conjuntos de cambios sobre un fichero o un conjunto de ficheros en una revisión unificada de dicho fichero o ficheros.
  • Esto puede suceder cuando un usuario, trabajando en esos ficheros, actualiza su copia local con los cambios realizados, y añadidos al repositorio, por otros usuarios. Análogamente, este mismo proceso puede ocurrir en el repositorio cuando un usuario intenta check-in sus cambios.
  • Puede suceder después de que el código haya sido branched, y un problema anterior al branching sea arreglado en una rama, y se necesite incorporar dicho arreglo en la otra.
  • Puede suceder después de que los ficheros hayan sido branched, desarrollados de forma independiente por un tiempo, y que entonces se haya requerido que fueran fundidos de nuevo en un único trunk unificado.
Repositorio 
El repositorio es el lugar en el que se almacenan los datos actualizados e históricos, a menudo en un servidor. A veces se le denomina depósito o depot (e.g. with SVK, AccuRev and Perforce).
Integración inversa 
El proceso de fundir ramas de diferentes equipos en el trunk principal del sistema de versiones.
Revisión ("versión") 
Una revisión es una versión dentro de una cadena de cambios.
Etiqueta ("tag", "release") 
Una etiqueta se refiere a una "toma" en el tiempo importante, consistente a lo largo de muchos ficheros. Estos ficheros en un instante del tiempo pueden ser colectivamente etiquetados con un nombre fácil de identificar por el usuario, con significado, o con un número de revisión.
Resolver 
El acto de la intervención del usuario para atender un conflicto entre diferentes cambios al mismo documento.
Actualización ("sync") 
Una actualización integra los cambios que han sido hechos en el repositorio (por ejemplo por otras personas) en la copia de trabajo local.
Copia de trabajo 
La copia de trabajo es la copia local de los ficheros de un repositorio, en un momento del tiempo o revisión específicos. Todo el trabajo realizado sobre los ficheros en un repositorio se realiza inicialmente sobre una copia de trabajo, de ahí su nombre. Conceptualmente, es un cajón de arena o sandbox.
Congelar 
congelar significa permitir los últimos cambios (commits) para solucionar las fallas a resolver en una entrega (release) y suspender cualquier otro cambio antes de una entrega, con el fin de obtener una version consistente. Si no se congela el repositorio, un desarrollador podría comenzar a resolver una falla cuya resolución no esta prevista y cuya solución dé lugar a efectos colaterales imprevistos.

[editar] Véase también

Por orden alfabético:

[editar] Enlaces externos

cs:Verzování de:Versionsverwaltung en:Revision control fa:سورس کنترل fi:Versionhallinta fr:Gestion de version he:ניהול גרסאות id:Pengontrol versi it:Controllo versione ja:バージョン管理システム ko:버전 관리 lt:Versijų kontrolės sistema lv:Versiju pārvaldības sistēma nl:Versiebeheersysteem no:Versjonskontrollsystem pl:System kontroli wersji pt:Sistema de controle de versão ro:Controlul versiunilor ru:Система управления версиями sv:Versionshantering th:การควบคุมการปรับปรุงแก้ไข uk:Система керування версіями vi:Hệ thống quản lý phiên bản zh:版本控制

Herramientas personales