Libertonia
Portada · Todo · Software Libre · Desarrolladores · Comunidad · Internet · Tecnología · Meta · Diarios
Introducción a Subversion

Documentación
Por coder
departamento odio-el-vetusto-cvs , Sección Desarrolladores
Puesto a las Thu May 20th, 2004 at 10:40:57 AM CET
Ya sabíamos que Subversion estaba en desarrollo y también que es estable desde hace tiempo.

Aunque yo usaba el arcaico CVS y no me iba mal, ya me había topado con algunas de sus limitaciones y/o carencias.

Hace pocas fechas me disponía a montar un repositorio y pensé en Subversion.

He empezado a usarlo y estas son mis impresiones.

 


Introducción a Subversion

Un poco de historia

Subversion es un servicio encargado de controlar el desarrollo de los distintos proyectos que se crean en una empresa de desarrollo de soft.

Este programa nace con el objetivo en mente de sustituir a CVS (Concurrent Versioning System), el cual ha sido demostrado tiene bastantes carencias y/o limitaciones.

Es un sistema de control de versiones libre. Su licencia es la Apache 1.1. Subversion se encarga de mantener un árbol histórico de ficheros y directorios a lo largo del tiempo.

Esta idea no es nueva y tampoco se está reinventando la rueda, simplemente se está mejorando. Al parecer, en el año 2000 los desarrolladores de CollabNet estaban realmente quemados por los problemas que causaba el uso de CVS (cuya idea se fraguó en 1985) en su suite de desarrollo SourceCast. Fue en ese año cuando comenzaron a buscar programadores para el diseño e implementación de Subversion con la idea en mente de mejorar CVS y sustituirlo como componente de SourceCast en favor de Subversion.

Allá por Febrero de 2000 el grupo CollabNet contactó con Karl Fogel, un hombre que llevaba años ofreciendo el servicio de CVS a empresas para controlar sus desarrollos junto a su amigo Jim Blandy. El segundo permitió al primero dedicarse enteramente al proyecto Subversion de manera indefinida.

El número de desarrolladores creció debido a que el proyecto atrajo a mucha gente que compartía los mismos deseos: mejorar CVS. Así, después de poco más de un año de programación, los desarrolladores de Subversion empezaron a usar su propio sistema en lugar de CVS, que era lo que usaban hasta ese momento.

Algunas de las características que hacen de Subversion un digno sucesor de CVS son:

  • Histórico de directorios: a diferencia de CVS, la nueva implementación permite mantener un histórico de directorios creados, renombrados y/o borrados.
  • Histórico real de archivos: CVS guardaba todos los cambios realizados sobre un archivo en un fichero de texto. Esto representaba un serio problema porque a la hora de, por ejemplo, crear un fichero con el nombre de otro que ya existía, se heredaba el histórico del fichero viejo aunque ya no tuvieran nada en común. Eso ha dejado de ocurrir: ahora cualquier operación que incluya copiado, renombrado, borrado o añadido tendrá su propio histórico.
  • Consistencia de los datos almacenados: Subversion maneja de igual manera ficheros de texto y binarios: hace uso de un algoritmo de "diferenciación" que permite compresión de los datos dentro del repositorio y, además, se apoya en una base de datos BDB (Berkeley DB).
  • Transacciones: Igual que en el banco cuando efectuamos una operación, en Subversion las modificaciones del repositorio se realizan completas o no se realizan. O se realizan todos los pasos o no se realiza ninguno. Nunca se quedará un commit a mitad.
  • Modificable: Subversion ha sido diseñado de forma que cualquier modificación no conlleve demasiado esfuerzo: consiste básicamente en una serie de APIs bien definidas programadas en varias librerías compartidas.
Instalando Subversion

La instalación la he realizado sobre una distribución Gentoo Linux 2004.1 aunque los pasos imagino que serán casi los mismos en cualquier distribución. La versión del programa que he instalado ha sido la última disponible en el árbol Portage: la 1.0.2.

# emerge -s subversion
Searching...
[ Results for search key : subversion ]
[ Applications found : 1 ]


* dev-util/subversion
Latest version available: 1.0.2
Latest version installed: 1.0.2
Size of downloaded files: 5,813 kB
Homepage: http://subversion.tigris.org/
Description: A compelling replacement for CVS
License: Apache-1.1

Las dependencias que tiene Subversion dependen de las necesidades que tenga cada administrador del repositorio. En mi caso necesitaba soporte para python y también para WebDAV/DeltaV (una especificación que permite el acceso a ficheros como URLs). Dicho esto, las dependencias que yo necesité instalar fueron:

* dev-lang/swig
Latest version available: 1.3.21
Latest version installed: 1.3.21
Size of downloaded files: 1,975 kB
Homepage: http://www.swig.org
Description: Simplied Wrapper and Interface Generator
License: as-is


* net-misc/neon
Latest version available: 0.24.5
Latest version installed: 0.24.5
Size of downloaded files: 585 kB
Homepage: http://www.webdav.org/neon
Description: HTTP and WebDAV client library
License: GPL-2

Para instalar simplemente ejecuté:

# ACCEPT_KEYWORDS="~x86" emerge subversion

Y él sólo instaló las dependencias. Para el que no sepa que significa la variable pasada al programa emerge: se trata del sistema de 'enmascarado' de paquetes de Gentoo. x86 significa paquete de la rama estable y ~x86 paquete inestable.

Los paquetes tardaron en compilar (Xeon 3GHz):

# genlop -t neon swig subversion

* net-misc/neon

merge time: 37 seconds.
* dev-lang/swig

merge time: 1 minute and 11 seconds.
* dev-util/subversion

merge time: 4 minutes and 45 seconds.

Es decir, muy poco rato. No obstante se pueden obtener binarios en la web de tigris.

Algunos comandos de subversion

Veamos ahora de forma breve algunos comandos que incluye subversion.

  • svn: Es el equivalente al comando 'cvs' de CVS. Es el comando que más se utiliza por todas las operaciones que permite realizar. Ejemplos:
    *Listar los directorios (proyectos) de un repositorio (almacén):

    # svn list --verbose file:///var/svn/repos/
    13 user May 18 11:21 proyecto/

    Esto nos indica la última revisión realizada (13). Quién la realizó (user). Cúando se realizó y sobre qué directorio tuvo lugar esa acción.

    # svn import . http://192.168.2.2/svn/repos/proyecto --message "import inicial del proyecto" --username user --password password

    Adding (bin) imagenes/mod10.swf
    Adding index.htm


    Committed revision 14.

    Con esto hemos creado el import inicial de un proyecto.

  • svnlook: comando útil que nos permite averiguar información sobre el repositorio. Ejemplo:
    # svnlook history /var/svn/repos/
    REVISION PATH
    -------- ----
    4 /
    3 /
    2 /
    1 /
    0 /
  • svnadmin: herramienta para el administrador del repositorio. Nos permite crear, borrar, reparar, etc. Ejemplillos:
    # svnadmin create /var/svn/repositorio

    Eso nos crea el esqueleto básico de un repositorio de subversion.
    # svnadmin repare /var/svn/repositorio

    Nos arregla las inconsistencias del almacén de proyectos. Dependiendo del número de proyectos tardará más o menos tiempo.

  • mod_dav_svn: para mí uno de los mejores componentes, permite navegación web y ver la última revisión de un proyecto. Es un navegador mínimo pero funciona bien.
  • svnserve: es el componente para lanzar el demonio en 'standalone'.

Una vez vistos los componentes es hora de configurar Subversion para aceptar conexiones -al menos- vía http y poder realizar transacciones.

Configurando Subversion para aceptar conexiones WebDAV/DeltaV

En Gentoo la configuración para poder accesar a Subversion vía http es bien sencilla. Basta ejecutar el típico config de ebuild, que en el momento de confeccionar este howto es el de la versión 1.0.2:

# ebuild /var/db/pkg/dev-util/subversion-1.0.2/subversion-1.0.2.ebuild config

Eso nos crea el repositorio y ajusta el dueño y permisos a apache (que es el usuario que ejecuta el servidor web en Gentoo):

mkdir -p ${SVN_REPOS_LOC}/conf
einfo ">>> Populating repository directory ..."
# create initial repository
/usr/bin/svnadmin create ${SVN_REPOS_LOC}/repos
einfo ">>> Setting repository permissions ..."
chown -Rf apache:apache ${SVN_REPOS_LOC}/repos
chmod -Rf 755 ${SVN_REPOS_LOC}/repos

Un repositorio subversion cuenta con dos directorios, uno (conf/)para configuraciones tales como un fichero de autentificación y otro (repos/) que es el repositorio en sí. Este segundo directorio contiene lo siguiente:

# ls /var/svn/repos/
README.txt conf dav db format hooks locks

Dentro del subdirectorio conf de repos/ hallamos el fichero svnserve.cnf. Este fichero sirve para gestionar las distintas opciones que el demonio svnserve nos ofrece. Sólo es necesario configurarlo si vamos a permitir acceso usando subversion como demonio del sistema. Yo no lo uso pues prefiero acceder al repositorio vía webdav, pero un fichero svnserve.cnf mínimo debe tener, al menos:

# [general]
anon-access = none # no permitimos acceso anónimo de ningún tipo, ni lectura
auth-access = write # permisos 'blanket' (totales) para aquellos usuarios # autentificados.
password-db = passwd # fichero donde se encuentran los user/passwd si no usamos los # del sistema
realm = Repositorio Subversion #mensaje típico de bienvenida

NOTA: Permisos blanket significa que tendrá acceso de ese tipo a todos los proyectos. Por ejemplo, permiso blanket read significa que el usuario que lo tenga podrá leer el código de todos los proyectos. Esto se puede afinar pero a mi no me hace falta, por lo que no se detalla aquí. En el book de Subversion que hay en la entrada de Bibliografía podemos indagar sobre ello.

Además de esto y totalmente gratis, Paul de Vrieze (el mantenedor del paquete en Gentoo), nos provee el esqueleto básico de configuración necesaria para usar el módulo de webdav con apache:

# cat /etc/apache2/conf/modules.d/47_mod_dav_svn.conf
<IfDefine SVN>
<IfModule !mod_dav_svn.c>
LoadModule dav_svn_module extramodules/mod_dav_svn.so
</IfModule>
<Location /svn/repos>
DAV svn
SVNPath /var/svn/repos
AuthType Basic
# AuthName "Subversion repository"
AuthName "Repositorio Subversion"
AuthUserFile /var/svn/conf/svnusers
Require valid-user
</Location>
</IfDefine>

SVNPath es la ruta completa al repositorio en el sistema de archivos (Location es como si fuera un ScriptAlias, crea una URL 'virtual' para acceder al contenido de otro directorio).

AuthUserFile es el equivalente al fichero 'passwd' en un svnserve.cnf normal y corriente. Contiene un usuario y passwd por línea. Es recomendable cifrar las contraseñas con MD5 cuando usemos htpasswd2 para crear usuarios:

# htpasswd2 -m /var/svn/conf/svnusers user

Eso nos creará un usuario con login user y nos pedirá un password que será cifrado en el fichero svnusers. Si el fichero no está creado hemos de añadir la opción -c.

Una vez añadido un usuario sólo nos falta arrancar apache con un par de opciones, así que para ello vamos al fichero /etc/conf.d/apache2 y a la línea APACHE_OPTS le añadimos: -D DAV -D SVN.

Reiniciamos Apache y ya deberíamos tener acceso al repositorio mediante la url http://servidor/svn/repos/

Eso sí, como aún no tenemos alojado ningún proyecto, veremos el repositorio vacío.

Ya que estamos, vamos a crear un proyecto ahora:

# cd proyecto
# svn import . http://servidor/svn/repos/proyecto --username user --password password --message "Import inicial"


Adding config.php
Adding index.php
Adding consulta.php


Committed revision 15.
proyecto #

Listo, ahora si volvemos a navegar a la URL de antes sí veremos el proyecto listado y podremos navegar por la última revisión. ¡Un momento! ¿Sólo por la última revisión? Sí, el navegador que incorpora el módulo de webdav de subversion es mínimo y sólo ofrece esa posibilidad. Es aquí donde entra en juego...

VIEWCVS

ViewCVS es una de las aplicaciones más útiles y más conocidas para navegar por un repositorio. Aunque su nombre engaña a día de hoy es posible usar ViewCVS para ver el contenido de un repositorio Subversion. Podemos verlo en funcionamiento en el propio SourceForge (sirviendo de acceso a su CVS).

La instalación de ViewCVS en Gentoo es muy sencilla e imagino que será prácticamente igual en todas las distribuciones. Se trata de instalar los cgis y configurarlos:

# emerge viewcvs

Y luego editamos /etc/viewcvs/viewcvs.conf para reflejar nuestra configuración:

# $EDITOR /etc/viewcvs/viewcvs.conf


svn_roots = svn : /var/svn/repos
svn_parent_path = /var/svn
default_root = svn
main_title = Repositorio Subversion
forbbiden = example
languages = es-es

Si vamos a usar BD también tendremos que tocar:

host =
database_name = ViewCVS
user =
passwd =

Ahora sólo nos faltaría añadir un virtual host de este estilo a apache:

<VirtualHost *:80>
DocumentRoot /var/www/localhost/htdocs/viewcvs
ServerName viewcvs.servidor.com
TransferLog /var/log/apache2/viewcvs_access.log
ErrorLog /var/log/apache2/viewcvs_error.log
ScriptAlias /cgi-bin/ /var/www/localhost/htdocs/viewcvs/cgi/
<Directory /var/www/localhost/htdocs/viewcvs/cgi/>
Options +ExecCGI
</Directory>
</VirtualHost>

Y ya podríamos navegar por él viendo todas las versiones como en un CVS normal y corriente ;-)

Supongamos que hemos visto una aplicación que nos interesa y todavía no han sacado un tar. En ese caso si queremos bajarnos la última revisión del código deberemos usar el comando 'cvs' pasándole la opción 'checkout':

$ svn checkout http://servidor/svn/repos/proyecto

En este momento es cuando los programadores vagos de mi curro dicen..."¿voy a tener que ejecutar eso cada vez?" A lo que yo respondo: "osi tu eres un vago, necesitas RapidSVN".

RapidSVN

Es el GUI ideal para programadores. Podemos ver unas cuantas screenshots. Al utilizar WxWindows se puede instalar en Windows, Linux u otros SOs.

La instalación en Gentoo es trivial: emerge rapidsvn y ya está. No requiere ningún tipo de configuración. La URL para descargar la version para Windows es esta.

TortoiseCVS

Este módulo viene genial para los programadores de Windows: se instala y permite navegar desde el explorador de archivos por un proyecto. La URL para más información es esta.

Y con esto termina esta breve introducción a Subversion.

Bibliografía

http://svnbook.red-bean.com/  :  Fundamental, es la biblia de Subversion.

< SCO se gana nuevos enemigos (5 comments) | De GNOME a KDE (57 comments) >
Enlaces Relacionados
· en la web de tigris
· verlo en funcionamiento
· screenshots
· esta
· esta[2]
· More on Documentación
· Also by coder

Encuesta
¿Has usado ya Subversion?
· Sí, y moooola. 37%
· No y no tengo pensado hacerlo. 12%
· Uso CVS y no tengo muy claro si el cambio me va a beneficiar. 30%
· Otro. 20%

Votos: 40
Resultados | Otras Encuestas

Menu
· crear cuenta
· FAQ
· búsqueda
· Fuentes de Noticias

Login
Nueva cuenta
Usuario:
Contraseña:

Ver: Modo: Orden:
Introducción a Subversion | 8 comentarios (6 temáticos, 2 editoriales, 0 ocultos)
Yo me conformo con poco (none / 0) (#3)
por ridiculum a las Thu May 20th, 2004 at 12:27:11 AM CET
(Información Usuario)

Me conformaria con poder usar simplemente CVS en lugar del horror del SCCS. Me conformaria con que la gente que hace hardware fuera algo mas disciplinada y usase al menos SCCS en lugar de no usar nada.

Es curioso, pero esto del control de versiones es algo que se da por supuesto, pero que:
  • Pocos lo usan
  • Donde lo usan, en muchos sitios no tienen claro el potencial
  • Parece algo exclusivo de programadores de software (se excluye Verilog, y demas HDL)


Asi que claro, no te puedes imaginar lo espectacular que podria ser tener subversion, o Arch o algo similar en el curro, con su bugzilla o equivalente y con todas esas cosas tipicas que se dan por supuesto que existen en las empresas, mas que nada, por que existen fuera de ellas y en proyectos tipicamente catalogados de aficionados.



La empresa en general es así (none / 0) (#4)
por coder a las Thu May 20th, 2004 at 09:49:03 AM CET
(Información Usuario) http://fluzo.org/

Uff, y que lo digas.

Parece ser algo exclusivo de desarrollo soft, sí. Aún así, no te puedes hacer una idea de lo que me está costando hacerle ver al jefe de mi curro las bondades de usar control de versiones. Aquí ahora mismo se trabaja con una política lamentable que llevan usando años: hay un server interno que comparte ficheros por samba. Para modificar un fichero de código, un devel se ha de bajar el fichero que quiere modificar desde el samba a su máquina, modificarlo localmente, subirlo de nuevo por samba y, por último, subir la versión modificada desde el server samba por FTP al server en producción. Hablando en plata: es una puta mierda de sistema que no sirve para nada. Añade a esto que el jefe tiene acceso directo por FTP al server en producción y modifica los códigos sin avisar...

Aquí hay un par de programadores convencidos ya del potencial de un Subversion/CVS. De los dos diseñatas que tenemos hay uno que está convencido también pero ahí se acaba todo. La mitad de la plantilla y el jefe no entienden (ni quieren entender) las mejoras y ventajas que supondría implantar un servidor de desarrollo.

Así que aún ando con ese mini ascii que viste en el IRC en el que buscaba la solución ideal al problema.

Tengo unas ganas de acabar con ese samba + ftp ...
atrapado por tu moda
[ Padre ]


Me suena a arch (none / 0) (#6)
por man ls a las Thu May 20th, 2004 at 12:07:12 PM CET
(Información Usuario)

Puede parecer raro, pero lo que he leído de GNU arch es que funciona de forma parecida: compartiendo un directorio, y automágicamente ya gestiona las versiones. No lo he usado personalmente. Échale un vistazo: a veces soluciones un poco esotéricas pueden ser más prácticas que las estándar.

En lo demás, me identifico totalmente. El control de versiones favorito aquí suele ser Outlook: se mandan las versiones por correo, como mucho. Y casi toda la gente con la que he currado no había usado un control de versiones en la vida (alguno SourceSafe, y uno cvs). No lo entiendo, sinceramente: ¿no habría que conocer las herramientas antes de considerarse profesional de algo?

[ Padre ]


 
Genial subversion (none / 0) (#5)
por osoh (imobachgs at softhome dot net) a las Thu May 20th, 2004 at 12:05:48 PM CET
(Información Usuario) http://www.banot.net/~imo/

Soy uno de los que sufrió los "achaques" del CVS en su momento. Afortunadamente, "descubrí" subversion hace ya uno tiempo (versión 0.26 si no mal recuerdo) y estoy encantado con él.

Lo uso incluso para las prácticas de clase: como hago las memorias en LaTeX, usar subversion para controlar los cambios (cuando trabajo en grupo normalmente) es la mar de cómodo.

Por cierto, enhorabuena por el artículo ;-)

Saludos.
--
Que no haya pasión que no valga el mal que cien años dura (Enrique Bunbury)


 
Uups (none / 0) (#7)
por osoh (imobachgs at softhome dot net) a las Thu May 20th, 2004 at 12:18:49 PM CET
(Información Usuario) http://www.banot.net/~imo/

Han aparecido sendas vulnerabilidades para CVS y Subversion. En el caso de este último, podría llegarse a ejecutar código remotamente. Más información, aquí y en Slashdot.<7p>

Parece ser que en el caso de CVS sólo están en peligro aquellos que hagan uso del pserver.

Por cierto, no se pierdan los comentarios en slashdot (filtren, por supuesto, los que tengan menos de 5 puntos). Algunos realmente ocurrentes ;-)
--
Que no haya pasión que no valga el mal que cien años dura (Enrique Bunbury)


 
Lo descubrí (none / 0) (#8)
por toomany a las Thu May 20th, 2004 at 12:59:01 PM CET
(Información Usuario) http://www.toomany.net

... hace ya un año y pico, y fundamentalmente lo uso para manejar todo el sistema de documentación de procesos en la empresa donde estoy ;-) Francamente, una gran maravilla...
Have a nice day ;-) TooManySecrets


 
Introducción a Subversion | 8 comentarios (6 temáticos, 2 editoriales, 0 ocultos)
Ver: Modo: Orden:

ecol Logo Powered by Scoop
Todas las Marcas Registradas y copyrights de esta página son propiedad de sus respectivos dueños.
Los comentarios son propiedad del que los escribe.
Los iconos de las noticias y el logotipo son propiedad de Javier Malonda.
El Resto © 2002 Escomposlinux.org y aledaños.

Puedes sindicar los contenidos de libertonia en formato RSS 1.0 y RDF 0.9. También se puede sindicar la cola de envíos pendientes de moderación.

El proyecto escomposlinux.org está dedicado a la memoria de tas

crear cuenta | faq | búsqueda