Presentación de PowerPoint - LDC

Download Report

Transcript Presentación de PowerPoint - LDC

Universidad Simón Bolívar
Sistemas de Operación II (CI-4821)
Abril-Julio 2013
MANEJADORES DE CONTROL DE VERSIONES
Carlos Gómez
Pedro Romero
Temas:
• Sistema de control de versiones (SCV)
Definición
Conceptos Básicos
Evolución
Características
Clasificación
• CVS, Subversion
• GIT
SCV / Definición
Es un sistema que registra los cambios realizados sobre un
archivo o conjunto de archivos a lo largo del tiempo, de modo que
se pueda recuperar versiones específicas de los mismos en un
determinado momento.
Un SVC posee tres capacidades importantes:
• Reversibilidad: retornar a un estado anterior del
proyecto en caso de fallas.
• Concurrencia: Muchas personas modificando el mismo
código o documento.
• Anotación: Adjuntar información relevante de los
cambios realizados.
SCV / Conceptos Básicos
•
•
•
•
•
Repositorio: lugar en el que se almacenan los
datos actualizados e históricos de cambios
(sistema de archivos en un disco duro, un banco
de datos, etc).
Revisión: Versión determinada de la información
que se gestiona.
Tags: Permiten identificar de forma fácil
revisiones importantes en el proyecto.
Módulo: Conjunto de directorios y/o archivos
dentro del repositorio que pertenecen a un
proyecto común.
Branch: Es una copia del proyecto aislada, de
forma que los cambios realizados no afecten al
resto del proyecto y vice versa, excepto cuando
los cambios sean "unidos" de un lado al otro.
SCV / Conceptos Básicos
•
•
•
•
•
Baseline: Una revisión aprobada de un documento
o fichero fuente, a partir del cual se pueden realizar
cambios subsiguientes.
Checkout: crea una copia de trabajo local desde
el repositorio.
Commit: Consiste en realizar un cambio local en el
proyecto y luego almacenar dicho cambio en el
repositorio.
Merge: Une dos grupos de cambios en un archivo
(o grupo de archivos), generando una revisión
unificada.
Conflicto: Sucede cuando dos o más personas
intentan realizar diferentes cambios en la misma
porción de código.
SCV / Conceptos Básicos
•
Update: Integra los cambios que han sido
realizados en el repositorio en la copia de trabajo
local.
•
Change set: Conjunto de cambios realizados en
un único commit.
SCV / Evolución
SCV / Características
•
•
•
Un sistema de control de versiones debe proporcionar:
Mecanismo de almacenamiento de los elementos que deba
gestionar
(ej.
archivos
de
texto,
imágenes,
documentación...).
Posibilidad de realizar cambios sobre los elementos
almacenados (ej. modificaciones parciales, añadir, borrar,
renombrar o mover elementos).
Registro histórico de las acciones realizadas con cada
elemento o conjunto de elementos (normalmente pudiendo
volver o extraer un estado anterior del producto).
SCV / Clasificación
Sistema de control de versiones locales:
Información acerca de cambios se
mantiene en un repositorio local.
SCV / Clasificación
Sistema de control de versiones centralizados:
Necesitan el uso de un servidor y
repositorio central.
SCV / Clasificación
Sistema de control de versiones distribuidos:
Permiten el uso de múltiples repositorios, y
sincronización entre ellos.
CVS, Subversion
Historia CVS:
• CVS surge como evolución de RCS.
• Paso de la primera generación a la segunda
generación de manejadores.
• Expandir el alcance de los manejadores de un
simple archivo a un conjuntos de archivos.
• Dick Grune y dos alumnos(1984 y 1985):
- Uno era trabajador en el horario de 9 a 5.
- El otro era muy irregular en sus horas de
trabajo.
- El profesor solo podía trabajar en las noches.
•
Brian Berliner (1989 – 1990):
- Introduce el concepto de ramificación al control
de versiones en CVS.
CVS, Subversion
Historia Subversion:
• CollabNet (2000):
- Busca reclutar un grupo de desarrolladores con
intenciones de sustituir al CVS.
- CVS para este momento es el manejador de
control de versiones por default.
- “Lo mejor que había en el momento”.
- “El que ya todos estaban familiarizados”.
• CollabNet logra contratar a:
- Karl Fogel, autor de Open Source Development
with CVS.
- Jim Brandy, quien ya tenía ya el nombre de
“Subversion” en mente y también el diseño básico del
repositorio de Subversion, en el que propone introducir
el manejo de directorios al alcance de la herramienta.
CVS, Subversion
Historia Subversion:
•
No querían abrir nuevos caminos en la
metodología del control de versiones, sólo querían
corregir CVS.
•
Subversion incorporaría las características de
CVS y preservaría el mismo modelo de desarrollo,
pero sin duplicar los defectos obvios de CVS.
•
Debía ser lo bastante similar para que cualquier
usuario de CVS pudiera hacer el cambio con poco
esfuerzo.
CVS, Subversion
Características CVS, Subversion:
•
Versionado de directorios.
- CVS solamente lleva el historial de ficheros
individuales.
- Subversion implementa un sistema de ficheros
versionado “virtual ” que sigue los cambios sobre
árboles de directorios completos a través del tiempo.
Ambos, ficheros y directorios, se encuentran bajo el
control de versiones.
CVS, Subversion
Características CVS, Subversion:
• La solución copiar-modificar-mezclar:
- Modelo del tipo copiar-modificar-mezclar como
alternativa al bloqueo. En este modelo, el cliente de
cada usuario se conecta al repositorio del proyecto y
crea una copia de trabajo personal—una réplica local
de los archivos y directorios del repositorio.
- El sistema de control de versiones a menudo
ayuda con la mezcla, pero en última instancia es un ser
humano el responsable de hacer que esto suceda
correctamente.
CVS, Subversion
Características CVS, Subversion:
• Verdadero historial de versiones:
- CVS está limitado al versionado de ficheros,
operaciones como copiar y renombrar no son
soportadas.
- CVS no puede reemplazar un fichero
versionado con algo nuevo que lleve el mismo nombre
sin que el nuevo elemento herede el historial del fichero
antiguo.
- Con Subversion, usted puede añadir, borrar,
copiar, y renombrar ficheros y directorios. Y cada
fichero nuevo añadido comienza con un historial nuevo,
limpio y completamente suyo.
CVS, Subversion
Características CVS, Subversion:
• Envíos atómicos:
- Una colección cualquiera de modificaciones o
bien entra por completo al repositorio, o bien no lo hace
en absoluto – Uso de transacciones.
- Esto permite a los desarrolladores construir y
enviar los cambios como fragmentos lógicos e impide
que ocurran problemas cuando sólo una parte de los
cambios enviados lo hace con éxito.
CVS, Subversion
Características CVS, Subversion:
• Elección de las capas de red:
- Subversion tiene una noción abstracta del
acceso al repositorio, facilitando a las personas
implementar nuevos mecanismos de red.
- Subversion puede conectarse al servidor HTTP
Apache como un módulo de extensión. Esto
proporciona a Subversion una gran ventaja en
estabilidad e interoperabilidad, y acceso instantáneo a
las características existentes que ofrece este servidor—
autenticación, autorizawción, compresión de la
conexión.
- También tiene disponible un servidor
independiente, y más ligero. Este servidor habla un
protocolo propio, el cual puede ser encaminado
fácilmente a través de un túnel SSH.
CVS, Subversion
Características CVS, Subversion:
• Manipulación consistente de datos:
- Subversion expresa las diferencias del fichero usando
un algoritmo de diferenciación binario, que funciona
idénticamente con ficheros de texto y ficheros binarios (CVS
no los manipula).
- Ambos tipos de ficheros son almacenados
igualmente en el repositorio.
• Ramificación y etiquetado eficientes:
- El coste de ramificación y etiquetado en Subversion
no necesita ser proporcional al tamaño del proyecto.
- Crea ramas y etiquetas simplemente copiando el
proyecto, usando un mecanismo similar al enlace duro. De
este modo estas operaciones toman solamente una cantidad
de tiempo pequeña y constante.
CVS, Subversion
Características CVS, Subversion:
• Hackability
- Subversion está implementado como una
colección de bibliotecas compartidas en C con APIs bien
definidas.
- Esto hace a Subversion extremadamente fácil de
mantener y reutilizable por otras aplicaciones y
lenguajes.
GIT
Historia GIT:
•
Núcleo de Linux (1991):
- Durante el mantenimiento de este Software, los cambios
realizados se pasaron en forma de parches y archivos.
•
BitKeeper (2002):
- El proyecto del núcleo de Linux empezó a usar un
sistema de control de versiones propietario llamado BitKeeper.
•
Inicios (2005):
- La relación entre la comunidad que desarrollaba el
núcleo de Linux y la compañía que desarrollaba BitKeeper se
vino abajo, y la herramienta dejó de ser gratuita.
- La comunidad de desarrollo de Linux crea una
herramienta de control de versiones inspirada en BitKeeper y
Monotone.
- GIT está escrito en C, Bourne Shell y Perl.
- Software libre bajo la licencia GNU.
GIT
Aspectos Fundamentales:
• Uso de instantáneas (snapshots):
Otros sistemas tienden a almacenar los datos
como cambios de cada archivo respecto a
una versión base.
Git almacena la información como
instantáneas del proyecto a lo largo del
tiempo.
GIT
•
Casi cualquier operación es local.
•
Integridad:
- Todo es verificado mediante un checksum antes de
ser almacenado y todo es identificado a partir de ese
momento mediante dicha suma. Esto significa que es
imposible cambiar los contenidos de cualquier archivo o
directorio sin que GIT lo sepa. GIT detecta la pérdida de
información durante la transmisión.
- El checksum es generado mediante el hash SHA-1
que consiste en una cadena de 40 caracteres
hexadecimales. Por ejemplo:
24b9da6552252987aa493b52f8696cd6d3b00373
GIT
•
Estados:
- Committed: datos almacenados de forma segura
en la base de datos local.
- Modified: se ha modificado un archivo pero
todavía no se ha confirmado en la base de datos local.
- staged: se ha marcado un archivo modificado en
su versión actual para que vaya en una próxima
confirmación.
GIT
GIT
•
Sistemas operativos:
GIT
Funcionamiento interno directorio git:
$
ls .git
HEAD: Apuntador al branch actual.
branches/: no se utiliza actualmente.
config: opciones de configuración del proyecto.
description: archivo usado por GitWeb.
hooks/: contiene todos los scripts.
index: archivo donde se almacena el staging area.
info/: patrones a ignorar.
objects/: Almacena todo el contenido de la base de datos.
refs/: guarda los apuntadores a las confirmaciones de
cambios.
GIT
Usuarios: