You are on page 1of 5

Ingeniería del Software

Por: Fabricio A. Flores G.


Módulo: 9no “A” - Sistemas
Fecha: 2010-01-07
Tema: Subversión

– ¿Qué es Subversión?
Subversión es un sistema de control de versiones diseñado específicamente para reemplazar al
popular CVS. Es software libre bajo una licencia de tipo Apache/BSD y se le conoce también como
svn por ser el nombre de la herramienta utilizada en la línea de órdenes.

Una característica importante de Subversión es que, a diferencia de CVS, los archivos versionados
no tienen cada uno un número de revisión independiente, en cambio, todo el repositorio tiene un
único número de versión que identifica un estado común de todos los archivos del repositorio en un
instante determinado.

– ¿Cómo funciona?

Con subversión, se puede acceder al repositorio a través de redes, lo que le permite ser usado por
personas que se encuentran en distintos ordenadores. A cierto nivel, la posibilidad de que varias
personas puedan modificar y administrar el mismo conjunto de datos desde sus respectivas
ubicaciones fomenta la colaboración. Se puede progresar más rápidamente sin un único conducto
por el cual deban pasar todas las modificaciones. Y puesto que el trabajo se encuentra bajo el
control de versiones, no hay razón para temer por que la calidad del mismo vaya a verse afectada si
se ha hecho un cambio incorrecto a los datos, simplemente deshaga ese cambio.
– Ventajas
– Se sigue la historia de los archivos y directorios a través de copias y renombrados.
– Las modificaciones (incluyendo cambios a varios archivos) son atómicas.
– La creación de ramas y etiquetas es una operación más eficiente. Tiene costo de
complejidad constante (O(1)) y no lineal (O(n)) como en CVS.
– Se envían sólo las diferencias en ambas direcciones (en CVS siempre se envían al
servidor archivos completos).
– Puede ser servido mediante Apache, sobre WebDAV/DeltaV. Esto permite que
clientes WebDAV utilicen Subversion de forma transparente.
– Maneja eficientemente archivos binarios (a diferencia de CVS que los trata
internamente como si fueran de texto).
– Permite selectivamente el bloqueo de archivos. Se usa en archivos binarios que, al no
poder fusionarse fácilmente, conviene que no sean editados por más de una persona a
la vez.
– Cuando se usa integrado a Apache permite utilizar todas las opciones que este
servidor provee a la hora de autentificar archivos (SQL, LDAP, PAM, etc.).

– Desventajas

– El manejo de cambio de nombres de archivos no es completo. Lo maneja como la


suma de una operación de copia y una de borrado.

– No resuelve el problema de aplicar repetidamente parches entre ramas, no facilita


llevar la cuenta de qué cambios se han realizado. Esto se resuelve siendo cuidadoso
con los mensajes de commit.

– ¿Cómo instalarlo y crear repositorios?

Vamos a instalar un servidor de Subversion que gestione las peticiones a través de Apache, lo cual
lo dotará de una serie de funcionalidades añadidas. Estas funcionalidades las proporcionarán los
distintos módulos de Apache existentes, como el poder usar autentificación por base de datos.
Realmente útil a la hora de mantener el control de acceso a distintos usuarios por proyecto.

$ sudo aptitude install subversion libapache2-svn


En el directorio /etc/apache2/mods-enabled puedes ver como se han creado enlaces a varios ficheros
de los cuales ahora mismo nos interesa dav_svn.conf. Lo vamos a editar para hacer algunas
modificaciones para crear un repositorio llamado pruebas.

Localizamos las líneas donde se define el repositorio por defecto svn:

# <Location URL> ... </Location>


# URL controls how the repository appears to the outside world.
# In this example clients access the repository as http://hostname/svn/
#<Location /svn>

Descomentamos la línea y cambiamos el nombre del repositorio pruebas:

# <Location URL> ... </Location>


# URL controls how the repository appears to the outside world.
# In this example clients access the repository as http://hostname/svn/
<Location /pruebas>

Tal y como indica, descomentamos para activar el repositorio:


# Uncomment this to enable the repository,
# DAV svn

Así:

# Uncomment this to enable the repository,


DAV svn

Modificamos también las líneas:

# Set this to the path to your repository


# SVNPath /var/lib/svn

Para establecer el path del repositorio:

# Set this to the path to your repository


SVNPath /var/lib/svn/pruebas

Inicialmente comentaremos las siguientes líneas para desactivar la seguridad:

<LimitExcept GET PROPFIND OPTIONS REPORT>


Require valid-user
</LimitExcept>

No olvidemos descomentar la última línea. Ya que es donde termina el repositorio.

</Location>

Como somos muy ordenados, queremos crear un repositorio por cada proyecto. Así será más
sencillo gestionar las políticas de seguridad. Todos estos repositorios se van a crear dentro del
directorio /var/lib/svn por lo que tenemos que crearlo previamente.

$ sudo mkdir /var/lib/svn

Ahora tenemos que crear el repositorio en sí:

$ sudo svnadmin create /var/lib/svn/pruebas

Aunque no es estrictamente necesario, vamos a crear los directorio trunk, tags y branches que
servirán para almacenar el código actual, los tag y las posibles ramas que pueda tener nuestro
proyecto:

$ sudo svn mkdir --message="Setting up the directories..." \


file:///var/lib/svn/pruebas/trunk \
file:///var/lib/svn/pruebas/tags \
file:///var/lib/svn/pruebas/branches

Dado que vamos a acceder a este repositorio a través de apache, tendremos que asignarle el
propietario adecuado:

$ sudo chown www-data:www-data /var/lib/svn/pruebas -R

Sólo nos queda reiniciar el servidor Apache para que vuelva a leer la configuración actualizada:

$ sudo /etc/init.d/apache2 restart

Si abres un navegador y accedes a http://localhost/pruebas podrás ver el contenido del repositorio


pruebas.

– ¿Como crear usuarios y dar permisos?

Para crear el primer usuario, ejecute


(cambie <usuario> por el nombre de usuario a crear) :
sudo htpasswd -c /etc/subversion/passwd <usuario>

A continuacion suministre la clave asignada al usuario Para crear el segundo utilice el mismo
comando pero sin la opcion -c
sudo htpasswd /etc/subversion/passwd <usuario>

Autenticación selectiva

Ahora editaremos el fichero de autorización, pudiendo definir grupos (en la sección [groups]) y
luego definiendo rutas del repositorio con un listado de los permisos de los usuarios y/o grupos a
dichas secciones:

# vim /home/svn/conf/authz

El contenido mímino sería algo similar a:

[groups]
admins = root

[/]
@admins = rw

En este fichero, se supone que tenemos que haber creado en el paso anterior un usuario root, de
modo que dicho usuario root es añadido a un grupo llamado admins, luego se define la sección [/],
es decir la raíz del repositorio, a la cual damos accesos de lectura y escritorio sólo a dicho grupo y a
nadie más.

El fichero antes de que lo edites tiene mucha documentación al respecto de cómo configurarlo, es
muy recomendable que lo leas con calma para evaluar las diferentes opciones que te puede dar su
correcto uso.

Configurar permisos de ficheros

Dado que todas las operaciones las hemos hecho por comodidad como usuario root antes de
terminar tendremos que asignar los permisos de la carpeta /home/svn al usuario que realmente tiene
que usarlos, que en este caso es Apache2 y por ende www-data:

chown -R www-data:www-data /home/svn

Finalmente reiniciamos Apache2 y listo:

/etc/init.d/apache2 restart

– Principales comandos

– Import: Comando utilizado para subir al repositorio la estructura inicial de nuestro proyecto.

– Checkout: Comando para descargar en un PC un proyecto desde un repositorio.


– Add: Comando utilizado para añadir un fichero a nuestro proyecto. No es subido al
repositorio hasta que se indique con el comando “commit”. El comando add solo deja
“marcado” ese fichero o directorio como parte del repositorio.
– Delete: Comando que permita marcar un fichero o directorio para ser eliminado del
respositorio.
– Commit: Comando que nos permite subir al repositorio todos los cambios hechos sobre un
proyecto en local.
– Update: Comando que nos permite actualizar nuestro proyecto en local desde el repositorio
central.

Bibliografía:

• Subversión – Guía Ubuntu <http://www.guia-ubuntu.org/index.php?title=Subversion> En


línea, consultado el 7 de Enero de 2010

You might also like