Presentación

Ponentes

Francisco Jesús Rubio Reales

Ignacio Barrancos Martínez

Agenda

Objetivos

El problema del trabajo en grupo y sus soluciones: Actualidad

CVS

Subversion

Comparativa: Subversion vs CVS

Conclusiones

Ruegos y preguntas

Objetivos

Control de Versiones (para todos)

- No sólo para la programación

- No sólo para grupos de trabajo

Mostrar el uso

- Por qué CVS

- Por qué Subversion

Comparar funcionalidades

- Evaluación y discusión

- Proporcionar criterios de elección

El problema (I)

Cuando Harry conoció a Sally y se pusieron a trabajar

El problema (II)

Harry y Sally intentan ponerse de acuerdo

El problema (y III)

Harry y Sally ya pueden trabajar:

Sistemas de Control de Versiones

Libres:

CVS

El estándar de-facto. Usado en SF, Savannah, Berlios, etc.

http://www.cvshome.org

Subversion

La alternativa más conocida de entre las libres a CVS

http://subversion.tigris.org/

Arch

Otra alternativa libre a CVS, esta vez distribuida.

http://gnuarch.org/

Sistemas de Control de Versiones

Propietarios:

BitKeeper

Usado en el desarrollo del núcleo de Linux.

http://www.bitkeepeer.com/

Code Co-Op

Sistema distribuido (P2P).

http://www.relisoft.com/co_op/

Visual Source Safe

El sistema de Microsoft.

http://msdn.microsoft.com/ssafe/

CVS

Instalación

Configuración del Servidor:

Con su servidor dedicado (pserver)

A través un túnel ssh

Configuración del cliente:

Acceso local (CVSROOT=path)

Pserver (CVSROOT=:pserver:usuario@servidor:path)

Túnel ssh (CVSROOT=:ext:usuario@servidor:path)

CVS

Crear un repositorio:

$ cvs -d ~/miRepositorio init

$ ls -lR ~/miRepositorio

checkoutlist cvswrappers modules taginfo

checkoutlist,v cvswrappers,v modules,v taginfo,v

commitinfo Emptydir notify val-tags

commitinfo,v history notify,v verifymsg

config loginfo rcsinfo verifymsg,v

config,v loginfo,v rcsinfo,v

(passwd para pserver)

(users para notificaciones)

(tratamiento binarios con cvswrappers)

CVS

Crear un proyecto:

$ cvs -d ~/miRepositorio import miHolaMundo yo imp_inicial

N miHolaMundo/holamundo.c

No conflicts created by this import

$

$ ls -R ~/miRepositorio

/home/rubio/miRepositorio:

CVSROOT miHolaMundo

/home/rubio/miRepositorio/miHolaMundo:

holamundo.c,v

(-m comentario de las modificaciones)

CVS

Obtener una copia local:

$ mkdir miCajitaArena

$ cd miCajitaArena

$ cvs -d ~/miRepositorio co miHolaMundo

cvs checkout: Updating miHolaMundo

U miHolaMundo/holamundo.c

$ ls -R

.:

miHolaMundo

./miHolaMundo:

CVS holamundo.c

./miHolaMundo/CVS:

Entries Repository Root

CVS

Actualizar el repositorio con las modificaciones:

$ cd miCajitaArena/miHolaMundo

$ vi holamundo.c

$ cvs ci

cvs commit: Examining .

~/miRepositorio/miHolaMundo/holamundo.c,v <-- holamundo.c

new revision: 1.2; previous revision: 1.1

$

CVS

Añadir un nuevo archivo:

$ cd miCajitaArena/miHolaMundo

$ cp ~/fotitos_playa/Sally_en_la_playa.jpg

$ vi Makefile

$ ls

CVS holamundo.c Makefile Sally_en_la_playa.jpg

$ cvs add Makefile Sally_en_la_playa.jpg

cvs add: scheduling file `Makefile' for addition

cvs add: scheduling file `Sally_en_la_playa.jpg' for addition

cvs add: use `cvs commit' to add these files permanently

$ cvs ci

cvs commit: Examining .

~/miRepositorio/miHolaMundo/Makefile,v <-- Makefile

initial revision: 1.1

~/miRepositorio/miHolaMundo/Sally_en_la_playa.jpg <-- Sally...

initial revision: 1.1

$

CVS

Añadir un nuevo archivo (binarios):

$ cd ~/miCajitaArena

$ cvs -d ~/miRepositorio co CVSROOT

$ cd CVSROOT

$ vi cvswrappers

<< *.jpg -k 'b' >>

$ cvs ci

cvs commit: Examining .

~/miRepositorio/CVSROOT/cvswrappers,v <-- cvswrappers

new revision: 1.2; previous revision: 1.1

cvs commit: Rebuilding administrative file database

$

CVS

Añadir un directorio:

$ mkdir fotos_Sally

$ cp ~/fotitos_playa/Sally/top?.jpg fotos_Sally/

$ cvs add fotos_Sally/

Directory ~/miRepositorio/miHolaMundo/fotos_Sally added to the

repository

$ cvs add fotos_Sally/top?.jpg

....

$ cvs ci

cvs commit: Examining .

cvs commit: Examining fotos_Sally

~/.../miHolaMundo/fotos_Sally_playa/top1.jpg,v <-- top1.jpg

initial revision: 1.1

~/.../miHolaMundo/fotos_Sally_playa/top2.jpg,v <-- top2.jpg

initial revision: 1.1

$

CVS

Eliminar archivos:

$ cvs remove -Rf fotos_Sally/

cvs remove: Removing fotos_Sally

cvs remove: scheduling `fotos_Sally/top1.jpg' for removal

cvs remove: scheduling `fotos_Sally/top2.jpg' for removal

cvs remove: use `cvs commit' to remove this file permanently

$ cvs ci

cvs commit: Examining .

cvs commit: Examining fotos_Sally

~/miRepositorio/miHolaMundo/fotos_Sally/top1.jpg,v <-- top1.jpg

new revision: delete; previous revision: 1.1

~/miRepositorio/miHolaMundo/fotos_Sally/top2.jpg,v <-- top2.jpg

new revision: delete; previous revision: 1.1

$

(no se borran los directorios por Attic)

CVS

Recuperando cambios de otros usuarios:

$ cvs update

cvs update: Updating .

RCS file: ~/miRepositorio/miHolaMundo/holamundo.c,v

retrieving revision 1.2

retrieving revision 1.3

Merging differences between 1.2 and 1.3 into holamundo.c

M holamundo.c

cvs update: Updating fotos_Sally

$

CVS

Saber qué he cambiado:

$ cvs status

cvs status: Examining .

==================================================================

File: Makefile Status: Up-to-date

Working revision: 1.1 Sun Jul 11 17:05:52 2004

Repository revision: 1.1 ~/miRepositorio/miHolaMundo/Makefile,v

Sticky Tag: (none)

Sticky Date: (none)

Sticky Options: (none)

==================================================================

...

$

CVS

Ver el histórico de cambios:

$ cvs log holamundo.c

RCS file: ~/miRepositorio/miHolaMundo/holamundo.c,v

....

----------------------------

revision 1.4

date: 2004-07-11 19:38:56 +0000; author: rubio; state: Exp; lines: +1 -1

Añadido comentario final

----------------------------

revision 1.3

date: 2004-07-11 19:33:35 +0000; author: rubio; state: Exp; lines: +1 -1

Añadido un puntito al mensaje.

----------------------------

...

CVS: Clientes

WinCVS: http://www.wincvs.org/

CVS: Clientes

TortoiseCVS: http://www.tortoisecvs.org/

SVN

Instalación

deb http://people.debian.org/~adconrad woody subversion

Configuración del Servidor:

Con su servidor dedicado (svnserve)

A través un tunel ssh (svn+ssh)

A través de http (Apache2 con WebDAV)

A través de https

Configuración del cliente:

Acceso local (file://path)

Svnserve ( svn://usuario@servidor:path)

Http ( http://usuario@servidor:path)

SVN

Crear un repositorio:

# mkdir -p /var/lib/svn

# cd /var/lib/svn

# svnadmin create repositorio

# ls /var/lib/svn/repositorio/

conf dav db format hooks locks README.txt

Crear un repositorio:

# mkdir -p /var/lib/svn

# cd /var/lib/svn

# svnadmin create repositorio

Crear un nuevo proyecto:

$ cd ~/miRepositorio

$ svn import http://127.0.0.1/repositorio/miHolaMundo

Adding holamundo.c

Committed revision 1.

SVN

Obtener una copia local:

$ mkdir ~/miCajitaArena

$ cd ~/miCajitaArena

$ svn checkout http://127.0.0.1/repositorio/miHolaMundo

A miHolaMundo/holamundo.c
Checked out revision 1.

$ ls -Ra

.:

. .. miHolaMundo

./miHolaMundo:

. .. holamundo.c .svn

SVN

Actualizar el repositorio con las modificaciones:

$ mkdir ~/miCajitaArena/miHolaMundo

$ echo “/* Un comentario*/” >> holamundo.c

$ svn commit

Sending holamundo.c

Transmitting file data .

Committed revision 2.

SVN

Añadir archivos:

$ cd ~/miCajitaArena/miHolaMundo
$ cp ~/fotitos_playa/Harry_chiringuito.gif
$ vi album.html
$ svn add Harry_chiringuito.gif album.html
A (bin) Harry_chiringuito.gif

A album.html

$ svn commit

Adding (bin) Harry_chiringuito.gif

Adding album.html

Transmitting file data ..

Committed revision 3.

Tratamiento de binarios:

$ echo "A ver si te engaño" > Sally_en_la_piscina.jpg
$ svn add Sally_en_la_piscina.jpg

A Sally_en_la_piscina.jpg

SVN

Añadir directorios:

$ cd ~/miCajitaArena/miHolaMundo

$ mkdir -p fotos/sally/playa/
$ cp ~/fotitos_playa/Sally_top.gif fotos/sally/playa/Sally.gif

$ svn add fotos

A fotos

A fotos/sally

A fotos/sally/playa

A (bin) fotos/sally/playa/Sally.gif

$ svn commit

Adding fotos

Adding fotos/sally

Adding fotos/sally/playa

Adding (bin) fotos/sally/playa/Sally.gif

Transmitting file data ..

Committed revision 5.

SVN

Borrar archivos y directorios:

$ cd ~/miCajitaArena/miHolaMundo

$ svn delete Sally_en_la_piscina.jpg fotos/

D Sally_en_la_piscina.jpg

D fotos/sally/playa/Sally.gif

D fotos/sally/playa

D fotos/sally

D fotos

$ svn commit

Deleting Sally_en_la_piscina.jpg

Deleting fotos

Committed revision 7.

SVN

Recuperando los cambios de otros usuarios:

$ cd ~/miCajitaArena/miHolaMundo

$ svn update

U holamundo.c

A Sally_top.png

Updated to revision 8.

Saber qué he cambiado:

$ cd ~/miCajitaArena/miHolaMundo
$ echo " " >> holamundo.c

$ mkdir sally

$ svn add sally

A sally

$ svn status

A sally

M holamundo.c

SVN

Ver el histórico de cambios:

$ cd ~/miCajitaArena/miHolaMundo

$ svn log holamundo.c

--------------------------------------------------------------

r8 | ignacio | 2004-07-11 20:57:51 +0200 (Sun, 11 Jul 2004) | 2 lines

Modificaciones varias

--------------------------------------------------------------

r2 | ignacio | 2004-07-11 19:10:51 +0200 (Sun, 11 Jul 2004) | 2 lines

Esto es una prueba

--------------------------------------------------------------

r1 | ignacio | 2004-07-11 18:47:54 +0200 (Sun, 11 Jul 2004) | 3 lines

Esto es una prueba

--------------------------------------------------------------

SVN

Visualización a través

del navegador:

CVS: Clientes

RapidSVN: http://rapidsvn.tigris.org/

CVS: Clientes

TortoiseSVN: http://tortoisesvn.tigris.org

Recapitulando: CVS y SVN

Diferencias más notables

Almacenamiento del repositorio

Manejo de archivos binarios

Metadatos

Numerado de revisiones

Directorios administrativos (CVS, .svn)

Análisis: CVS vs SVN

Facilidad de instalación	gana CVS

Número de versión global	gana CVS

Conectividad	gana SVN

Gestión de binarios	gana SVN

Acceso desde el navegador	gana SVN

Fechas en checkout	gana CVS

Análisis: CVS vs SVN

Auto-Tags ('$Id: $')	gana CVS

Versionado de la configuración	gana CVS

Gestión de usuarios	gana SVN

Mover/Copiar archivos	gana SVN

Commits atómicos	gana SVN

Deshacer cambios	gana SVN

Análisis: CVS vs SVN

Renombrado de archivos	gana SVN

Madurez y estabilidad	gana CVS

Modernidad	gana SVN

Aceptación en sitios de desarrollo	gana CVS

Tamaño del repositorio	gana CVS

Conclusiones

Ninguno es mejor que el otro.

Subversion para extranets, CVS para intranets.

CVS sigue siendo el estándar de facto.

CVS mejor soporte para make.

Subversión optimiza el tráfico de red.

Subversión mejora la gestión de usuarios.

Conclusiones

Si ya conoces CVS sigue usándolo,

si no conoces ninguno usa SVN.

Gracias

2004-07-11T10:44:49