Instalación y uso de Subversion para principiantes

Subversion no es solo para codificadores o programadores. Puede ser utilizado para muchas cosas como restaurar la configuración de Nagios, documentos, y casi cualquier cosa basada en texto. Muchas personas se han preguntado por qué no comenzaron a utilizarlo antes. Para ellos, aquí mostramos cómo dar los primeros pasos en Subversion.

Este artículo explica rápidamente como instalar, configurar y usar Subversion localmente. Así como en una red a través de Apache. Para instalaciones y configuraciones más complejas, consulte la documentación que suministramos más abajo. Existe gran cantidad de documentos bien escritos y detallados sobre el tema. Este es solo un comienzo rápido para los que desean aprender algo nuevo.

Sistema

Paquetes y dependencias

Referencias

1. Instalación

Para nuestro ejemplo vamos a utilizar una instalación mínima del CD Servidor de CentOS 4.3 en una máquina con el VMware Server. Lo primero que necesitamos hacer es instalar los paquetes que mencionamos arriba.

[root@lucifer ~]# yum install mod_dav_svn subversion
Dependencies Resolved

=============================================================================
 Package                 Arch       Version          Repository        Size
=============================================================================
Installing:
 mod_dav_svn             i386       1.1.4-2.ent      base               50 k
 subversion              i386       1.1.4-2.ent      base              1.6 M
Installing for dependencies:
 apr                     i386       0.9.4-24.5.c4.1  base               88 k
 apr-util                i386       0.9.4-21         base               51 k
 guile                   i386       5:1.6.4-14       base              746 k
 httpd                   i386       2.0.52-22.ent.centos4  base
887 k
 httpd-suexec            i386       2.0.52-22.ent.centos4  base
28 k
 neon                    i386       0.24.7-4         base               86 k
 perl-URI                noarch     1.30-4           base               79 k
 swig                    i386       1.3.21-6         base              1.0 M
 umb-scheme              i386       3.2-35           base              967 k

Transaction Summary
=============================================================================
Install     11 Package(s)
Update       0 Package(s)
Remove       0 Package(s)
Total download size: 5.5 M
Is this ok [y/N]:

Diga si (y) y continúe hacia delante. Probablemente, sus opciones sean diferentes a las mostradas. Esa es la instalación.

2. Configuración

2.1. Apache

Antes de continuar profundizando, necesitamos asegurarnos de que Apache esté correctamente configurado. En nuestro caso asumimos que esto es una instalación virgen de CentOS, de lo contrario si ya tiene Apache trabajando, sea cuidadoso con lo que cambie. También explicaremos cómo configurar la protección básica por contraseña. En los casos que desee permitir el acceso público a los repositorios, puede descartar esto.

Lo primero es editar el fichero de configuración de Apache (/etc/httpd/conf/httpd.conf) y realizar los cambios que sean necesarios. Si necesita más ayuda o una configuración más complejas. Por favor consulte la documentación de Apache.

[root@lucifer ~] vim /etc/httpd/conf/httpd.conf -- Edit what you need and save
the file
[root@lucifer ~] service httpd start
[root@lucifer ~] chkconfig httpd on

Busque su computadora en la red y compruebe que pueda ver la página de prueba. Para ello ponga la dirección de su computadora en un navegador web. Ej http://yourserver. Funcionó ? Bien, vamos ahora con algo más divertido.

2.2. Configuración de Apache para Subversion

El próximo paso es configurar algunos detalles en Apache para que Subversion y Apache funcionen juntos cómodamente. Edite el fichero de configuración que Subversion instaló para usted:

[root@lucifer ~] cd /etc/httpd/conf.d/
[root@lucifer ~] vim subversion.conf

# Make sure you uncomment the following if they are commented out
LoadModule dav_svn_module     modules/mod_dav_svn.so
LoadModule authz_svn_module   modules/mod_authz_svn.so

# Add the following to allow a basic authentication and point Apache to where
# the actual
# repository resides.
<Location /repos>
        DAV svn
        SVNPath /var/www/svn/repos
        AuthType Basic
        AuthName "Subversion repos"
        AuthUserFile /etc/svn-auth-conf
        Require valid-user
</Location>

La ubicación (Location) es lo que Apache pasará en la barra de la URL. Por ejemplo: http://yourserver/repos apunta a el SVNPath que usted ha especificado. Nuestro ejemplo es simplemente eso, así que puede tomarse la liberta de poner las cosas donde desee. Asegúrese de salvar el fichero cuando haya terminado de editarlo.

A continuación tenemos que crear el fichero de contraseña que usted especificó en el paso anterior. Inicialmente utilizará el argumento -cm. Esto creará un fichero y encriptará la contraseña con MD5. Si usted necesita adicionar más usuarios, después de la creación inicial, asegúrese de haber utilizado solo la bandera -m y no -c.

[root@lucifer ~] htpasswd -cm /etc/svn-auth-conf yourusername
New password:
Re-type new password:
Adding password for user yourusername
[root@lucifer ~] htpasswd -m /etc/svn-auth-conf anotherusername
New password:
Re-type new password:
Adding password for user anotherusername
[root@lucifer ~] service httpd restart

2.3. Configurando su repositorio

Lo siguiente que necesitamos hacer es crear el repositorio actual en el cual comprobaremos las entradas y salidas a sus ficheros. Esto es simple de hacer con algunas de las herramientas incluidas en svn.

[root@lucifer ~] cd /var/www/ -- Or wherever you placed your path above
[root@lucifer ~] mkdir svn
[root@lucifer ~] cd svn
[root@lucifer ~] svnadmin create repos
[root@lucifer ~] chown -R apache.apache repos
[root@lucifer ~] service httpd restart

Luego comprobamos si se pude o no acceder al repositorio creado desde el navegador web: http://yourserver/repos. Usted debe recibir un pop-up preguntándole su nombre de usuario y contraseña. De ser así, escriba sus credenciales y debe recibir como respuesta una página con el texto Revision 0:/. De ser así, esa es la configuración del repositorio.

Si desea múltiples repositorios, lea la documentación que suministramos en los enlaces de arriba. En nuestro ejemplo solo configuramos un repositorio para mostrarle como comenzar a usarlo. Hablando de ello, a continuación vamos a ver como hacer exactamente eso.

3. Usando Subversion

3.1. Preparando su repositorio

Si todo lo que hicimos arriba le resultó bien, ahora estamos listos para comenzar a utilizar el repositorio que acabamos de crear. La herramienta svn de Subversion es un cliente de línea de comando que usaremos para hablarle a la base de datos. Para ver el uso de la herramienta svn, utilice la opción --help:

[root@lucifer ~] svn --help

Los argumentos más comunes que seguramente utilizará son: svn import, `svn checkout (co)svn commit (ci)`. Con estos usted importará inicialmente los ficheros hacia el interior de su repositorio, comprobará los trabajos realizados en ellos y aplicará los cambios de regreso a la base de datos. Es bastante sencillo una vez que los utilice varias veces.

Antes de continuar, vamos a explicar sobre la preparación de la estructura de directorios. Casi todas las documentaciones hablan sobre crear una cierta organización para sus directorios. Especialmente se menciona la existencia de branches, tags y trunk bajo la estructura del directorio raíz, donde trunk contiene todos los ficheros. Por ejemplo:

.
|-- project1
|   |-- branches
|   |-- tags
|   `-- trunk
`-- project2
    |-- branches
    |-- tags
    `-- trunk

En el libro se explica el por qué con un poco más de detalles. Para nuestro ejemplo no nos resulta incomodo utilizar este tipo de disposición porque no estamos codificando o manteniendo proyectos de software. Nuestro objetivo principal es almacenar ficheros de configuración y elementos de texto que no son complejos. Usted puede ajustar esto a sus necesidades.

Para continuar con nuestro ejemplo, vamos a crear algunos directorios y ponerles algunos ficheros adentro. Esto lo hacemos localmente en el servidor svn actual.

[root@lucifer ~] cd /tmp
[root@lucifer ~] mkdir mytestproj
[root@lucifer ~] cd mytestproj
[root@lucifer ~] mkdir configurations options main
[root@lucifer ~] vim configurations/testconf1.cfg -- Add whatever you want to
these files.
[root@lucifer ~] vim options/testopts1.cfg
[root@lucifer ~] vim main/mainfile1.cfg

Recuerde que usted puede crear la disposición de directorios que estime conveniente. Una vez que tenga la disposición inicial de lo que usted desea, es hora de importarla a Subversion.

3.2. Importando

[root@lucifer ~] svn import /tmp/mytestproj/
file:///var/www/svn/repos/mytestproj -m "Initial repository layout for
mytestproj"
Adding         /tmp/mytestproj/main
Adding         /tmp/mytestproj/main/mainfile1.cfg
Adding         /tmp/mytestproj/configurations
Adding         /tmp/mytestproj/configurations/testconf1.cfg
Adding         /tmp/mytestproj/options
Adding         /tmp/mytestproj/options/testopts1.cfg

3.3. Comprobando

Ahora comprobamos el resultado a través del navegador web. Ej. http://yourserver/repos. Lea con cuidado el resultado que se muestra, debe coincidir con lo que usted importó. Una vez que suba la disposición original al servidor svn esta quedará disponible para ser usada remotamente desde otra computadora, por tanto tiempo como esté conectado a el servidor de Subversion mediante alguna de las cuentas de usuario que creo anteriormente. Veamos un ejemplo:

[me@mylappy ~] cd /tmp
[me@mylappy ~] svn co http://yoursvnserver/repos/mytestproj
Authentication realm: &lt;http://yoursvnserver:80&gt; Subversion repos
Password for 'youruser':
A    mytestproj/main
A    mytestproj/main/mainfile1.cfg
A    mytestproj/configurations
A    mytestproj/configurations/testconf1.cfg
A    mytestproj/options
A    mytestproj/options/testopts1.cfg
Checked out revision 1.

3.4. Editar y aplicar

Como acabamos de ver, se ha comprobado la revisión 1 desde el servidor Subversion. Ahora podemos editar algunas cosas y aplicar los cambios de regreso al servidor Subversion.

[me@mylappy ~] cd mytestproj
[me@mylappy ~] vim configurations/testconf1.cfg -- Add or delete something and
save.
[me@mylappy ~] svn commit -m "Added a line to testconf1.cfg."
Sending        configurations/testconf1.cfg
Transmitting file data .
Committed revision 2.

Lo agradable de esto es que podemos eliminar todo el directorio que acabamos de confirmar. De hecho, la única razón por la que confirmamos fue para editar el contenido y luego ponerlo de regreso en línea. Explore su servidor web para comprobar la diferencia de los ficheros.

3.5. Adicionando y borrando elementos

Hasta ahora todo bien, pero cómo adicionamos más ficheros a directorios existentes en el repositorio ? Fácil, con el argumento add. Siga adelante y compruebe la última versión de su repositorio, copie un fichero a el directorio con add. Luego confirme los cambios con commit.

[me@mylappy ~] svn co http://yoursvnserver/repos/mytestproj
A    mytestproj/main
A    mytestproj/main/mainfile1.cfg
A    mytestproj/configurations
A    mytestproj/configurations/testconf1.cfg
A    mytestproj/options
A    mytestproj/options/testopts1.cfg
Checked out revision 2.

[me@mylappy ~] cd mytestproj
[me@mylappy ~] cp /etc/yum.repos.d/CentOS-Base.repo configurations/
[me@mylappy ~] svn add configurations/CentOS-Base.repo
A         configurations/CentOS-Base.repo

[me@mylappy ~] svn commit -m "Added the CentOS Yum repo file."
Adding         configurations/CentOS-Base.repo
Transmitting file data .
Committed revision 3.

Para eliminar elementos simplemente use delete en lugar de add. Aplique los cambios de regreso y estarán listos para continuar. Es tan simple como eso. Regrese nuevamente a su navegador web y notará que el número de revisión ahora debe ser 3. Usted podrá hacer clic en los ficheros y seleccionar los directorios de la misma forma.

3.6. Revertiendo

Ok, todo esto está muy bien pero cómo revertimos los cambios a una versión anterior ... a caso no es esto el punto de Subversion ?

Sí, así es.

Si está inseguro de la versión en la que se encuentra ... pruebe el comando log. Esta es la razón por la cual usted puso un mensaje dentro de cada confirmación, corto y preciso, pero suficiente información para hacerle recordar.

[me@mylappy ~] svn log http://yoursvnserver/repo -- For the entire repository
[me@mylappy ~] svn log http://yoursvnserver/repo/mytestproj -- For the
specific project

Esto devolverá una lista completa con números de revisiones y comentarios. Como mencionamos más arriba, esto nos permite seleccionar la revisión a la que deseamos regresar.

[me@mylappy ~] svn co -r 1 http://yoursvnserver/repo/mytestproj

Este comando lo llevará a la revisión número 1.

4. Listas de control de acceso

Usualmente, no es necesario que todos los usuarios tengan acceso a todos los repositorio. Usando las ACLs, podemos restringir el acceso a los repositorios por usuario. Las ACLs pueden ser habilitadas en el fichero especificado en la opción AuthzSVNAccessFile la cual toma el nombre de un fichero como su parámetro. Por ejemplo:

AuthzSVNAccessFile /etc/svn-acl-conf

Usted puede adicionar lo siguiente a la sección Location del fichero /etc/httpd/conf.d/subversion.conf:

<Location /repos>
        DAV svn
        SVNParentPath /var/www/svn/repos
        AuthzSVNAccessFile /etc/svn-acl-conf
        AuthType Basic
        AuthName "Subversion repos"
        AuthUserFile /etc/svn-auth-conf
        Require valid-user
</Location>

Cree el fichero /etc/svn-acl-conf. Este fichero está formado por secciones de la forma siguiente:

[reponame:repopath]
user = access

Donde access puede ser r (lectura), rw (lectura y escritura), o dejarlo vacío para ningún acceso. La ACL por defecto niega el acceso de los usuarios al repositorio. Suponga que existe un repositorio nombrado framework al cual le gustaría dar permisos de lectura al usuario jhon y a joe de lectura y escritura. Para esto puede adicionar las secciones siguientes:

[framework:/]
john =  r
joe = rw

Además, es posible crear grupos en una sección llamada groups. Los grupos son prefijados con el símbolo arroba (@) en la lista de control de acceso. Por ejemplo:

[groups]
staff = joe, george

[framework:/]
john =  r
@staff = rw

Si prefiere hacer accesibles todos los repositorios por todos los usuarios, puede adicionar una sección para el directorio raíz de cada repositorio.

[/]
* = r

5. Conclusión

Este artículo ha sido solo una pequeña muestra del poder que puede ofrecernos Subversion. Esta guía rápida nos pone en camino y muestra cómo usarlo, un poco para entender como funciona. Usted puede hacer cualquier cosa con las herramientas de Subversion, así que asegúrese de leer los documentos para comprender las diferentes opciones que puedan ayudarlo en sus tareas.

Recuerde que aunque la instalación de Apache puede estar capacitada para sus necesidades, puede utilizar todas las herramientas de Subversion localmente en una computadora si especifica el camino al repositorio de la forma file:///path/to/repo, en vez de la forma (http://yoursvnserver/repos/whatever) que utilizamos en nuestros ejemplos con Apache.

Subversion parece ser una alternativa que muchas personas utilizan en sus computadoras locales para mantener proyectos y ficheros de configuración.

Buena Suerte!!!

es/HowTos/Subversion (last edited 2007-11-12 18:46:00 by AlainRegueraDelgado)