Presentación Subversion
-
Upload
drpantera -
Category
Technology
-
view
92 -
download
0
description
Transcript of Presentación Subversion
![Page 1: Presentación Subversion](https://reader034.fdocument.pub/reader034/viewer/2022042512/5597087b1a28ab9a2f8b46c4/html5/thumbnails/1.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022042512/5597087b1a28ab9a2f8b46c4/html5/thumbnails/2.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022042512/5597087b1a28ab9a2f8b46c4/html5/thumbnails/3.jpg)
¿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](https://reader034.fdocument.pub/reader034/viewer/2022042512/5597087b1a28ab9a2f8b46c4/html5/thumbnails/4.jpg)
¿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/cusl3tucan
![Page 5: Presentación Subversion](https://reader034.fdocument.pub/reader034/viewer/2022042512/5597087b1a28ab9a2f8b46c4/html5/thumbnails/5.jpg)
¿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 prog0.92.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](https://reader034.fdocument.pub/reader034/viewer/2022042512/5597087b1a28ab9a2f8b46c4/html5/thumbnails/6.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022042512/5597087b1a28ab9a2f8b46c4/html5/thumbnails/7.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022042512/5597087b1a28ab9a2f8b46c4/html5/thumbnails/8.jpg)
Un ejemplo sencillito, por favor
Repositoriocentralizado
Copialocal
(1)Descarga de versión
(2)Aportación(“commit”)
Usuario1 Usuario2
![Page 9: Presentación Subversion](https://reader034.fdocument.pub/reader034/viewer/2022042512/5597087b1a28ab9a2f8b46c4/html5/thumbnails/9.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022042512/5597087b1a28ab9a2f8b46c4/html5/thumbnails/10.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022042512/5597087b1a28ab9a2f8b46c4/html5/thumbnails/11.jpg)
Un ejemplo sencillito, por favor
Repositoriocentralizado
Copialocal
Usuario1
Copialocal
(3)Descarga de versión
(4)Aportación(“commit”)
Usuario2
![Page 12: Presentación Subversion](https://reader034.fdocument.pub/reader034/viewer/2022042512/5597087b1a28ab9a2f8b46c4/html5/thumbnails/12.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022042512/5597087b1a28ab9a2f8b46c4/html5/thumbnails/13.jpg)
Un ejemplo sencillito, por favor
Repositoriocentralizado
Copialocal
desactual.
Usuario1
Copialocal
Usuario2
(6)Actualiza la versión
(5)Preguntoestado
![Page 14: Presentación Subversion](https://reader034.fdocument.pub/reader034/viewer/2022042512/5597087b1a28ab9a2f8b46c4/html5/thumbnails/14.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022042512/5597087b1a28ab9a2f8b46c4/html5/thumbnails/15.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022042512/5597087b1a28ab9a2f8b46c4/html5/thumbnails/16.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022042512/5597087b1a28ab9a2f8b46c4/html5/thumbnails/17.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022042512/5597087b1a28ab9a2f8b46c4/html5/thumbnails/18.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022042512/5597087b1a28ab9a2f8b46c4/html5/thumbnails/19.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022042512/5597087b1a28ab9a2f8b46c4/html5/thumbnails/20.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022042512/5597087b1a28ab9a2f8b46c4/html5/thumbnails/21.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022042512/5597087b1a28ab9a2f8b46c4/html5/thumbnails/22.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022042512/5597087b1a28ab9a2f8b46c4/html5/thumbnails/23.jpg)
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/statsvnhtml/index.html
![Page 24: Presentación Subversion](https://reader034.fdocument.pub/reader034/viewer/2022042512/5597087b1a28ab9a2f8b46c4/html5/thumbnails/24.jpg)
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](https://reader034.fdocument.pub/reader034/viewer/2022042512/5597087b1a28ab9a2f8b46c4/html5/thumbnails/25.jpg)
Referencias
Ayuda incorporada: svn help
Version Control with Subversion
http://svnbook.redbean.com/
StatSVN
http://wiki.statsvn.org/
kdiff3
http://kdiff3.sourceforge.net/