PDF de programación - 01 - Control de versiones con Subversion

Imágen de pdf 01 - Control de versiones con Subversion

01 - Control de versiones con Subversiongráfica de visualizaciones

Actualizado el 26 de Mayo del 2019 (Publicado el 9 de Abril del 2019)
615 visualizaciones desde el 9 de Abril del 2019
573,3 KB
33 paginas
Creado hace 15a (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 cliente­servidor

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: bloquear­modificar­desbloquear

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: Copiar­Modificar­Merge

 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: Copiar­Modificar­Merge

 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: Copiar­Modificar­Merge

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: Copiar­Modificar­Merge

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


Ac

Se publica la versión ”mergeada”.

Ahora los dos usuarios tienen los 
cambios de cada uno.

Pablo

Carlos

Pablo

Carlos

Repositorio

Repositorio





Escribe

Ap

Ac

Ap

Lee





Pablo

Carlos

Pablo

Carlos

Solución: Copiar­Modificar­Merge

 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: Copiar­Modificar­Merge

 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
  • Links de descarga
http://lwp-l.com/pdf15695

Comentarios de: 01 - Control de versiones con Subversion (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad