Introducción al Uso de Sistemas de Control de Versiones
| Autor: |
Jesús M. Castagnetto |
| Contacto: |
jesus@upch.edu.pe |
| Fecha: |
2008/02/01 |
| Organización: |
Universidad Peruana Cayetano Heredia, Dirección Universitaria de Información |
Agenda
¿Qué es un Sistema de Control de Versiones? (SCV)
Clasificación de SCVs y desarrollo histórico
Conceptos principales de SCV
- Flujos de trabajo usados en SCV:
- En solitario
- En pares
- Centralizado (2 variantes)
- Descentralizado (3 variantes)
Sistemas de Control de Versiones más conocidos
SCV: Sistema de Control de Versiones
Es un sistema que permite el manejo de múltiples revisiones de una unidad de
información (archivo de código, directorio, documento, proyecto, etc.)
- Se llaman también:
- SCR: Sistemas de Control de Revisiones (RCS: Revision Control System)
- MCF: (Sistema de) Manejo de Código Fuente (SCM: Source Code Management)
Permiten identificar, revertir, comparar, etc. los cambios que ocurren en la
información, así como el manejo de desarrollo paralelo de un proyecto.
Clasificación de SCVs
Se clasifican de acuerdo a dos criterios:
- Modelo de trabajo
- Local: Información acerca de cambios se mantiene en un repositorio local.
- Centralizado: Necesitan el uso de un servidor y repositorio central.
- Descentralizado: Permiten el uso de múltiples repositorios, y sincronización entre ellos.
- Unidad de información controlada
- Archivos: Controla solamente archivos individuales.
- Árboles de archivos: Puede manejar directorios (y sub-directorios) con sus archivos asociados.
Desarrollo histórico de SCVs
- Primera Generación:
- Control de archivos inidividuales, y almacenamiento de revisiones
local. Ejemplos: SCCS, RCS.
- Segunda Generación:
- Control de árboles de archivos, con almacenamiento de revisiones
centralizado. Manejo deficiente de algunas operaciones (ej.
renombrado de archivos). Ejemplo: CVS.
- Tercera Generación:
- Control de árboles de archivos, con almacenamiento de revisiones
centralizado. Manejo completo de operaciones complejas con
archivos. Ejemplo: Subversion.
Desarrollo histórico de SCVs (cont.)
- Cuarta Generación:
- Control de árboles de archivos, con almacenamiento de revisiones
descentralizado. Manejo deficiente de algunos flujos de trabajo y
consolidación compleja. Ejemplo: Arch.
- Quinta Generación:
- Control de árboles de archivos, con almacenamiento de revisiones
descentralizado. Manejo de múltiples flujos de trabajo, inlcuyendo
el centralizado. Ejemplo: Bazaar.
Conceptos básicos (1)
Revisión:
Conceptos básicos (2)
Árbol de trabajo (o Copia de Trabajo):
- El conjunto de directorios y archivos manejados por el SCV, y que
están bajo edición activa.
- Está asociado a una rama de trabajo en particular.
Rama (de Trabajo/Desarrollo):
- En el caso mas simple, una rama es un conjunto ordenado de
revisiones. La revisión más reciente se denomina la “cabeza” (head)
o “principal” (main).
- Las ramas se pueden separar y juntar como se necesite, formando un
grafo de revision. Estrictamente, un Grafo Acíclico Directo (DAG).
Conceptos básicos (3)
Repositorio:
- Un sitio de almacenamiento de revisiones.
- Físicamente puedes usar un archivo, colección de archivos, base de datos, etc.
Conflicto:
- Ocurre cuando dos personas han hecho cambios contradictorios en un mismo documento (o grupo de documentos).
- Los SCVs sólo alertan acerca de un conflicto.
Conceptos básicos (4)
Resolución:
- El proceso de resolver un conflicto.
Cambio (o Diff o Delta):
- Modificación en un archivo bajo control de revisiones.
Combinación o Integración:
- Une dos grupos de cambios en un archivo (o grupo de archivos),
generando una revisión unificada.
Conceptos básicos (5)
Parche (o Lista/Conjunto de cambios):
- Lista de cambios generada al comparar revisiones, y que puede usarse
para reproducir automáticamente las modificaciones hechas en el
código.
- Generalmente el resultado de cometer los cambios al repositorio.
Trabajando en solitario
- La forma mas simple de trabajar con un SCV.
- Generalmente más usado con sistemas descentralizados (ej. arch,
bazaar).
- Si se usa un sistema centralizado (ej. CVS, subversion), se requiere
un sistema accesorio de control de acceso y permisos.
- Útil para proyectos pequeños, o al inicio de uno que crecerá paulatinamente.
Trabajando en pares
- Usado en desarrollos pequeños a medianos.
- Ideal para el método de “Programación en pares” (Pair Programming).
- Requiere el uso de un SCV descentralizado.
Con un repositorio centralizado
- Usado cuando múltiples personas colaboran en un proyecto.
- Todos trabajan y hacen cambios en la misma rama (o ramas) de desarrollo.
- La información se sincroniza a través del repositorio central.
- Generalmente requiere un servidor central dedicado.
- Se necesita conexión de red para almacenar los cambios.
Repositorio centralizado y trabajo local
- Similar en muchos aspectos al flujo basado en un repositorio
centralizado.
- Permite al desarrollador el hacer cambios y almacenarlos
localmente.
- Estos se sincronizan con el repositorio central
cuando se conecte nuevamente a la red.
- Los VCS centralizados no soportan este flujo de trabajo.
- Sólo algunos de los VCS descentralizados pueden trabajar así.
Distribuido con una línea principal
- Cada desarrollador tiene su propia rama (o ramas) de trabajo
independiente.
- Además, todos tienen autorización para poder enviar cambios a la
rama principal.
- Permite que existan también combinaciones entre las diferentes
ramas de los desarrolladores.
Distribuido con intervención humana
- Como el flujo anterior y además:
- Todos pueden leer de la rama principal.
- Sólo una persona puede registrar cambios en la rama principal.
- Otros desarrolladores combinan cambios con esta persona.
Permite tener varias “lineas principales” en paralelo, ej.
estable, desarrollo, experimental, etc.
Distribuido con control automático
- Similar al flujo anterior, con el cambio de que no es una
persona quién decide que cambios se registran, sino un sistema
automatizado.
- Este sistema puede ser un programa, serie de programas, sistema
de pruebas reglas de selección/aceptación, o combinación.
- El sistema de control puede estar en un servidor separado.
- Ejemplo: Patch Queue Manager, PQM.
SCVs más usados/conocidos (1)
Sistemas que usan un repositorio centralizado
- CVS (Concurrent Versions/Versioning System)
- Desarrollado en los 80s por Dick Grune.
- Popular en lo 90s con proyectos de Código Libre.
- Subversion (svn)
- Desarrollado desde el 2000 por CollabNet, Inc.
- Creado para reemplazar y mejorar CVS.
- Muchos proyectos han migrado a svn, y también se ha integrado a
IDEs y hasta interfaces gráficas de Sistemas Operativos.
SCVs más usados/conocidos (2)
Sistemas que usan repositorios descentralizados
- Git (y relacionados: Cogio, StGIT, etc.)
- Creado por Linus Torvalds en el 2005.
- Usado principalmente en el Kernel de Linux.
- Darcs
- Creado por David Roundy (físico), basado en un teoría propia
acerca del álgebra de parches (ver el URL:
http://www.darcs.net/manual/node8.html, para más detalles).
- Sistema distribuido e interactivo, que permite la creación
“espontánea” de ramas de desarrollo.
SCVs más usados/conocidos (3)
Sistemas que usan repositorios descentralizados (...)
- Bazaar (bzr)
- Basado en sistemas como GNU arch y tla.
- Desarrollado por Robert Collins (Canonical), y un equipo de
otros desarrolladores, desde el 2005.
- Usado en el manejo de proyectos en Canonical, Ubuntu (y todos
sus derivados), etc.
- Permite múltiples diferentes flujos de trabajo, incluyendo la
migración de un flujo sencillo (ej. en solitario) a uno más
complejo (ej. distribuido con control automático de cambios).