Actualizado el 26 de Mayo del 2019 (Publicado el 9 de Abril del 2019)
695 visualizaciones desde el 9 de Abril del 2019
573,3 KB
33 paginas
Creado hace 16a (18/10/2008)
Control de versiones con Subversion
Conceptos fundamentales
Concepto de control de versiones.
Introducción a Subversion
¿Qué es Subversion?
Sistema de control de versiones.
Sistema centralizado para compartir información.
Gestiona archivos y directorios, y sus cambios a
través del tiempo.
Puedo recrear un proyecto desde cualquier momento
en su historia
Conceptos
Un repositorio, depósito o archivo es un sitio
centralizado donde se almacena y mantiene
información digital, habitualmente bases de datos o
archivos informáticos.
Subversion es un repositorio en forma de árbol con
una jerarquía de directorios y archivos.
Conceptos
n clientes se conectan al repositorio para leer o
escribir.
Al escribir, un cliente hace disponible la información
para otros.
Al leer, el cliente recibe información de otros.
Modelo clienteservidor
Repositorio
Escribe
Lee
Lee
Cliente
Cliente
Cliente
Gestionar cambios a través del tiempo
Subversion recuerda cada cambio que se haya
realizado en el repositorio.
Recuerda cambios realizado a cada archivo así
como cambios en el árbol de directorios:
Archivos y directorios nuevos
Archivos y directorios borrados
Archivos y directorios modificados o cambiados de lugar.
Gestionar cambios a través del tiempo
Generalmente un cliente lee la versión más reciente
del árbol de directorios y archivos.
Subversion provee la habilidad de leer estados
anteriores del sistema de archivos.
Se pueden conocer los cambios realizados, cuándo
se realizaron, y quién realizó dichos cambios.
Trabajo colaborativo
El objetivo de un sistema de control de versiones es
el de permitir editar de forma colaborativa y compartir
información.
Existen diferentes estrategias.
Un problema a resolver: Editar la misma
información sin pisar el trabajo de otro.
Problema a resolver
Repositorio
Repositorio
A
A
Lee
A
Lee
A
Edita
Aj
Edita
Af
Juan
Francisco
Juan
Francisco
Repositorio
Repositorio
Aj
Af
Escribe
Escribe
Aj
Juan
Af
Aj
Af
Francisco
Juan
Francisco
Juan y Francisco leen un archivo en su
versión más reciente desde el repositorio.
Juan edita el archivo con sus cambios.
Francisco edita el archivo con sus
cambios.
Juan manda sus cambios al repositorio.
Francisco manda sus cambios al
repositorio y sobreescribe los cambios de
Juan.
El repositorio recuerda los cambios que hizo
Juan, pero la versión de Francisco no los
incluye. La última versión del archivo en el
repositorio tiene los cambios hechos por
Francisco, pero no los cambios hechos por
Juan.
Opción: bloquearmodificardesbloquear
Repositorio
Repositorio
A
Bloquea
Lee
A
A
¡Está bloqueado!
Edita
Aj
● Una sola persona puede trabajar en cada
archivo a la vez.
● Es una solución con limitaciones:
● Problemas administrativos: Mientras
Juan edita el archivo, si Francisco lo
necesita, tiene que esperar a que Juan
termine. Pierde tiempo.
Juan
Francisco
Juan
Francisco
Repositorio
Repositorio
Aj
Escribe
Desbloquea
Aj
Juan
Aj
Bloquea
Aj
Lee
Aj
Francisco
Juan
Francisco
● Francisco podría querer editar el final de
un archivo de texto y Juan el principio del
mismo. Podrían trabajar simultáneamente
sin necesidad de esperar que el otro
termine.
Falso sentido de seguridad. Francisco
podría editar un archivo B y Juan un
archivo A, que dependan uno del otro. El
bloqueo simula seguridad, cuando los
cambios podrían comprometer la
integridad del código.
Solución: CopiarModificarMerge
Cada cliente crea una ”working copy” (reflejo
de los archivos y directorios) a partir del
repositorio.
Los clientes modifican independiente y
simultáneamente su copia local.
Las copias se fusionan en una nueva versión
final en el repositorio (merge).
Solución: CopiarModificarMerge
El sistema de control de versiones es un asistente
para la fusión (merge), pero el usuario es el
responsable de que la fusión se realice
correctamente.
Solución: CopiarModificarMerge
Pablo y Carlos copian el mismo
archivo.
Repositorio
Repositorio
A
A
Editan sus archivos.
Carlos publica su versión
antes.
Pablo obtiene un error de
”desactualizado”
Lee
A
Lee
A
Edita
Ap
Edita
Ac
Pablo
Carlos
Pablo
Carlos
Repositorio
Repositorio
Ac
Escribe
Ap
Ac
Ac
Desactualizado
Ac
Escribe
Ap
Pablo
Carlos
Pablo
Carlos
Solución: CopiarModificarMerge
Pablo compara la última versión con
la suya.
Repositorio
Repositorio
Ac
Ac
Se crea una nueva versión A¶
”mergeada” (fusionada).
Lee
ApAc
Ac
Edita
A¶
Ac
Se publica la versión ”mergeada”.
Ahora los dos usuarios tienen los
cambios de cada uno.
Pablo
Carlos
Pablo
Carlos
Repositorio
Repositorio
A¶
A¶
Escribe
Ap
Ac
Ap
Lee
A¶
Pablo
Carlos
Pablo
Carlos
Solución: CopiarModificarMerge
Los cambios de ambos usuarios se fusionan.
En caso de haber solapamiento en los cambios, el
sistema informa de un conflicto.
El archivo es marcado por el sistema, y el usuario
puede ver los cambios en conflicto y elegir el cambio
manualmente.
Nota: El software no es capaz de resolver conflictos automáticamente (todavía), solo los
programadores pueden tomar las decisiones ”inteligentes” en estos casos (por ahora). Esta
afirmación puede ser rebatida por usuarios de GeneXus...
Solución: CopiarModificarMerge
El tiempo usado en resolver conflictos resulta menor
que el tiempo perdido esperando por bloqueos.
Factor crítico: Comunicación entre los usuarios.
En la práctica, los cambios solapados son muy poco
frecuentes.
Subversion provee esta solución, y la opción de
bloquear archivos (conveniente por ejemplo para
archivos binarios).
Arquitectura de Subversion
Componentes de Subversion
svn
El programa cliente de línea de comando.
svnversion
Programa para reportar el estado (en términos de
revisiones de los ítems presentes) de una copia en
funcionamiento.
svnlook
Herramienta para inspeccionar un repositorio
Subversion.
Componentes de Subversion
svnadmin
Herramienta para crear, configurar, o reparar un
repositorio.
mod_dav_svn
Módulo plugin para el servidor Apache, para usar
el repositorio a través de la red.
svnserve
Otro programa para usar el repositorio a través de
la red.
Componentes de Subversion
svndumpfilter
Programa para filtrar dump streams de repositorios
de Subversion.
svnsync
Programa para hacer mirrors de un repositorio a
otro por la red.
URL de repositorios
Los repositorios Subversion son accesibles a través
de diferentes protocolos en un disco duro, a través
de la red, etc.
En última instancia, la dirección de un repositorio
Subversion es siempre un URL.
Tipo de URL – Forma de acceso
file:/// Acceso directo en disco local.
http:// Acceso via protocolo WebDAV a servidor Apache conciente de
Subversion.
https:// Igual que http://, pero con cifrado SSL.
svn:// Acceder a través de protocolo propio a servidor svnserve.
svn+ssh:// Igual que svn:// pero por túnel SSH.
Datos
Esta es una gráfica
con datos.
No podía faltar una
gráfica con datos en
la presentación.
Row 1
Row 2
Row 3
Row 4
Copia local – working copy
Es un árbol de directorios y archivos común y
corriente en mi computadora, obtenido desde el
repositorio.
Puedo editar, compilar si son fuentes, borrar, etc.
La copia local es privada: no se aplican mis cambios
en el servidor ni los cambios de otros en mi copia a
menos que yo lo pida.
Puedo tener muchas copias del mismo repositorio.
Copia Local
Luego de hacer cambios, podemos ”publicar”
(commit) los cambios en el repositorio.
Si otro publicó cambios, podemos fusionarlos en
nuestra copia (merge).
En nuestra copia se van a guardar los archivos de
configuración bajo el directorio .svn
A trabajar...
Para obtener una copia local del repositorio, hay que
hacer un checkout:
svn checkout svn://192.168.1.42/home/svn/ejemplo
Para publicar nuestros cambios, hacemos un
commit:
svn commit Clase.java m ”Arreglé un bug del setter”
Para actualizar nuestro repositorio respecto a la
versión del servidor, usamos update:
svn update
Revisiones
Commit publica TODOS los cambios de los archivos
y directorios como una transacción atómica
("commitea" todo o nada).
Al aceptar un commit, se crea un nuevo estado del
árbol del sistema de archivos, llamado una revisión.
Cada revision tiene asignado un número único,
natural, mayor en uno al número de la revisión
anterior.
Revisiones
Rev. 0
Rev. 1
Rev. 2
Rev. 3
/
/
/
/
/ej1
/ej1
/ej1
/ej2
/ej2
/ej2
Revisiones
En Subversion, el número de revisión se aplica a
árboles enteros, no a archivos individuales (no así en
otros sistemas de control de versiones).
Cada número de revisión es un estado particular del
repositorio tras haber sido commiteado un cambio.
“La revisión 42 de HolaMundo.java” significa
“HolaMundo.java como aparece tras el cuatrigésimo
segundo commit del repositorio.”
Revisiones
Nota: Las copias locales no siempre corresponden a una sola
revisión en el repositorio, pueden tener archivos de varias
revisiones distintas.
Para cada copia local, Subversion guarda esta
información en el directorio .svn:
En qué revisión está basada la copia local (llamado
working revision)
Una fecha de cuándo se actualizó la copia local por
el repositorio
Revisiones
svn status –verbose
Con este comando podemos conocer el estado de
nuestra copia local.
Las copias locales contienen archivos de varias
revisiones.
Los updates y commits son cosas separadas.
Cada vez que ”commiteamos”, nuestra copia local
termina con una mezcla de revisiones
Comentarios de: 01 - Control de versiones con Subversion (0)
No hay comentarios