Presentación Subversion

26
 Desarrollo de software en comunidad: Forja de código + Subversion (SVN) Manuel Palomo Duarte Oficina de Software Libre y Conocimiento Abierto (OSLUCA) Universidad de Cádiz

description

Presentación sobre uso básico de Subversion y una forja de desarrollo de software libre

Transcript of Presentación Subversion

Page 1: Presentación Subversion

   

Desarrollo de software en comunidad:Forja de código + Subversion (SVN)

Manuel Palomo DuarteOficina de Software Libre y 

Conocimiento Abierto (OSLUCA)Universidad de Cádiz

Page 2: Presentación Subversion

   

Contenidos

¿Esto qué es?

¿Y esto para que me sirve?

Forja

Subversion

Un ejemplo sencillito, por favor

Un ejemplo “con chicha”

Un ejemplo “a mala leche”

Más allá de SVN

Page 3: Presentación Subversion

   

¿Esto qué es?

Forja de código: web (pública) que ofrece facilidades para el desarrollo de software (libre)

http://sourceforge.net

https://forja.rediris.es/

http://code.google.com/

Subversion (SVN): sistema para la gestión de diferentes versiones del código de un programa

Suportado por la mayoría de forjas actualmente

Page 4: Presentación Subversion

   

¿Y esto para qué me vale?

La Forja ofrece muchos servicios:

Clasificación y estadísticas del proyecto

Repositorio Subversion (navegable y comparable)

Foros, noticias (RSS), wikis, notificaciones

Publicación de binarios y documentos

Gestión de tareas y errores con tickets

En una palabra: visibilidad

Veamos un ejemplo: Tucan Project (CUSL3)● https://forja.rediris.es/projects/cusl3­tucan

Page 5: Presentación Subversion

   

¿Y esto para qué me vale?

El uso de un repositorio Subversion:

Guarda copias de todas las versiones del código de un programa en un servidor externo

Recupera y compara versiones antiguas

Distribuye código: adiós a prog­0.9­2.seg.zip, 40MB

Funde aportaciones de varios usuarios

Saca muchas estadísticas (con StatSVN)

Veamos un ejemplo: Robinson 2.0 (DV2009)● https://forja.rediris.es/plugins/scmsvn/viewcvs.php/?root=robinson

Page 6: Presentación Subversion

   

Forja

También hay sistemas de gestión de proyectos:

Más completos que a una forja: incluyen más control vertical (roles), Gantt, etc (Ej: Redmine)

Muy fáciles de usar (todo vía web)

Vamos a usarlo: ¡ábrete ya tu cuenta!

Para la Universidad en España (IRIS Libre): https://forja.rediris.es/

Otra que te guste:

https://en.wikipedia.org/w/index.php?title=Comparison_of_open_source_software_hosting_facilities&redirect=no

Page 7: Presentación Subversion

   

Subversion

SVN se puede usar:

Llamada desde consola 

Desde GUIs (TortoiseSVN para Windows, Eclipse)

Subversion no hace magia

Pero gestiona perfectamente todo lo que puede

Conceptos:

Repositorio centralizado

Copia local

Aportación (commit)

Page 8: Presentación Subversion

   

Un ejemplo sencillito, por favor

Repositoriocentralizado

Copialocal

(1)Descarga de versión

(2)Aportación(“commit”)

Usuario1 Usuario2

Page 9: Presentación Subversion

   

Un ejemplo sencillito, por favor

Aprenderemos con un ejemplo por parejas

Búscate tu compañero de desarrollo

Poneos como administradores del proyecto

Usuario 1 descarga la versión actual (1)

Orden: svn checkout <URL> [­­username <usr>]

Obtendremos un directorio vacío

Crea en él un fichero con un hola mundo en C

Haz una versión “lite”, que tenga 5 o 6 líneas

Page 10: Presentación Subversion

   

Un ejemplo sencillito, por favor

¡Mi primera aportación a un SVN! (2)

Indica a SVN que gestione el fichero:

Orden: svn add hola.cIndica a SVN que envíe la aportación actual:

Orden: svn commit ­m “Hola mundo 1.0 lite”Revisa que se vea desde la web de tu proyecto

Aparece un subdirectorio .svn en todos tus directorios

¡No tocar! Es para uso interno de SVN

Page 11: Presentación Subversion

   

Un ejemplo sencillito, por favor

Repositoriocentralizado

Copialocal

Usuario1

Copialocal

(3)Descarga de versión

(4)Aportación(“commit”)

Usuario2

Page 12: Presentación Subversion

   

Un ejemplo sencillito, por favor

Usuario2 descarga la última versión, la 1 (3)

Orden: svn checkout <URL>

Crea un fichero makefileIndica a SVN que gestione el fichero:

Orden: svn add makefile

Pon un comentario junto al printf de hola.cIndica a SVN que envíe la aportación (4)

Orden: svn commit ­m “Hola mundo mejorado”

Page 13: Presentación Subversion

   

Un ejemplo sencillito, por favor

Repositoriocentralizado

Copialocal

desactual.

Usuario1

Copialocal

Usuario2

(6)Actualiza la versión

(5)Preguntoestado

Page 14: Presentación Subversion

   

Un ejemplo sencillito, por favor

Pregunto estado al repositorio central (5):

Orden: svn status

Salida: una línea con el estado de cada fichero

A: añadido

D: para borrar

M: modificado

?: no controlado por SVN

C: fichero en conflicto (lo vemos más adelante)

Page 15: Presentación Subversion

   

Un ejemplo sencillito, por favor

Actualizo a la última versión (6)

Orden: svn update

También puedo a lo bruto (puede ser lento):

Orden: rm * ;  svn checkout

¡Nada se pierde en SVN!

Este es el flujo normal de trabajo en SVN

Me vale para el 80% de las veces en un proyecto sencillo

Page 16: Presentación Subversion

   

Un ejemplo “con chicha”

Repositoriocentralizado

CopiaModif 1

Usuario1

CopiaModif 2

Usuario2

(7)Aportación(“commit”)

(8)Aportación(“commit”)

(9)Cambiosfundidos

Page 17: Presentación Subversion

   

Un ejemplo “con chicha”

Los dos usuarios trabajan a la vez:

Usuario1 pone comentario de autoría y licencia

Usuario2 añade “exit 0”

Usuario1 envía su aportación (7)

● Orden: svn commit ­m “Añadidos autores”

Usuario2 envía su aportación (8)● Orden: svn commit ­m “Mejora de calidad”

Houston, ¿tenemos un problema?

Page 18: Presentación Subversion

   

Un ejemplo “con chicha”

No hay problema:

SVN funde los cambios automáticamente

Usuario2 recibe mensaje de desactualizado

Usuario2 actualiza su repositorio

● Orden: svn update● Los mismo indicadores que en svn status, 

más G (merge): fundido de versiones

Usuario2 envía su aportación (8)● Orden: svn commit ­m “Mejora de calidad”

¡Viva Subversion!

Page 19: Presentación Subversion

   

Un ejemplo “con mala leche”

Repositoriocentralizado

CopiaModif 1

Usuario1

CopiaModif 2

Usuario2

(11)Aportación(“commit”)

(12)Aportación(“commit”)

(13)Conflicto deversiones

(10)Actualiza la versión

Page 20: Presentación Subversion

   

Un ejemplo “con mala leche”

Usuario1 actualiza (10): svn update

Usuario1 cambia “Hola mundo” por “Hola frikis”

Usuario2 cambia “Hola mundo” por “Hola a todos”

Usuario1 envía su aportación (11)

Orden: svn commit ­m “Cambio de mensaje”

Usuario1 envía su aportación (12)

Orden: svn commit ­m “Cambiado mensaje”

SVN no puede fundir los cambios … ¡conflicto!

Page 21: Presentación Subversion

   

Un ejemplo “con mala leche”

Usuario2 tiene ahora tres versiones del fichero

hola.c.r4: con la que empezó a trabajar

hola.c.mine: resultado de sus modificaciones

hola.c.r5: la que hay en el repositorio

hola.c: fichero con las diferencias de hola.c.r*

Usuario2 hace lo que le de la gana

Depende del lenguaje, proyecto, …

Se puede usar diff, kdiff3, tkdiff o apoyarse en la web

Page 22: Presentación Subversion

   

Un ejemplo “con mala leche”

Usuario2 deja en hola.c el contenido que desea subir y borra los demás

Usuario2 envía su aportación (12)

Orden: svn commit ­m “Cambiado mensaje”

Con esto cubro el 99% de los usos de SVN

Pero hay mucho más (ver referencias)

Ejemplo: svn checkout ­r 2

Ramas para congelar o pruebas (branches)

Page 23: Presentación Subversion

   

Más allá de SVN

StatSVN saca estadísticas de un repositorio:

¿A qué hora del día hago más commits?

¿Quien ha modificado más líneas de código?

Uso: descargo y desempaqueto StatSVN

Orden: svn log ­v ­­xml > logfile.log

Orden: java ­jar statsvn.jar logfile.log <directorio>

Ej: http://www.statsvn.org/statsvn­html/index.html

Page 24: Presentación Subversion

   

Más allá de SVN

Si SVN se te queda pequeño puedes pasar a un sistema distribuido

Permiten que varios usuarios tengan el repositorio de referencia de parte del código

Más potencia => más complejo

Ejemplos:

Bazaar (usado en Ubuntu)

Git (usado en el núcleo Linux)

Page 25: Presentación Subversion

   

Referencias

Ayuda incorporada: svn help

Version Control with Subversion

http://svnbook.red­bean.com/

StatSVN

http://wiki.statsvn.org/

kdiff3

http://kdiff3.sourceforge.net/

Page 26: Presentación Subversion

   

Gracias por su atención

¿[email protected]