sábado, 8 de enero de 2011

SUBVERSION

QUE ES SUBVERSION?

Subversion 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 Subversion 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.
Subversion 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 ese cambio se lo deshace.

CÓMO FUNCIONA

  • Subversion se compone de un programa "servidor" y otro "cliente". 
  •    El servidor contiene una copia maestra de la información a compartir.
  • Los usuarios usan el cliente para descargar la información existente en el servidor
  •       Cuando un usuario realiza un cambio, lo envía al servidor para que otros usuarios puedan descargarlo.
  • El servidor guarda los ficheros dentro de una base de datos (no son visibles en el sistema de ficheros).
VENTAJAS

  • Se sigue la historia de los archivos y directorios a través de copias y renombrados.
  • Registra cambios en la estructura de directorios (permite mover y renombrar sin perder el historial). Subversion no usa RCS, sino un sistema virtual de ficheros versionado sobre una base de datos
*       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.

COMO INSTALAR SUBVERSION ?

*       Hay versiones para Windows y cualquier sistema basado en Unix.
*       Puede instalarse como servidor independiente o como módulo de Apache.
*       Consume pocos recursos.
*       Una instalación básica solo requiere conocimientos a nivel de usuario del sistema operativo.
LINUX
Para realizar la instalación seguimos los siguientes pasos:
Paso 1 – Instalar un servidor LAMPP
sudo apt-get apache2 php5-mysql libapache2-mod-php5 mysql-server
Paso 2 –
Instalar Subversion
sudo apt-get install subversion libapache2-svn
Paso 3 –
Crear un repositorio
Create the subversion repository in /svn
sudo svnadmin create /svn
Paso 4 –
Configurar el módulo webdav
Editar el archivo de configuración del módulo webdav del apache. Utilize su editor favorito, en este caso yo utilizo nano.
sudo nano /etc/apache2/mods-enabled/dav_svn.conf
El archivo debería quedar como sigue:
DAV svn
SVNPath /svn
AuthType Basic
AuthName “Subversion Repository”
AuthUserFile /etc/apache2/dav_svn.passwd
Grabe el archivo.
Paso 5 –
Crear un usuario en SVN
Para crear un usuario en el reposotorio utilize el siguiente comando:
sudo htpasswd -cm /etc/apache2/dav_svn.passwd
Ejemplo:
sudo htpasswd -cm /etc/apache2/dav_svn.passwd geek
New password:
Re-type new password:
Adding password for user geek
Paso 6 –
Reiniciar el Apache
Reinicie el apache que se encuentra corriendo con el siguiente comand:
sudo /etc/init.d/apache2 restart
Ahora puede apuntar con el browser a http://www.server/svn, debería ver que el depósito está habilitado para el acceso de lectura anónima, pero se comprometen que el acceso exige un nombre de usuario.
WINDOWS
Para realizar la instalación seguimos los siguientes pasos:
1.
Descargar subversion 1.4.4 y descomprimirlo
2.
Copiar los archivos mod_authz_svn.so y mod_dav_svn.so , que se encuentra en svn-win32-1.4.4/bin, en APACHE_INSTALL_DIR/modules
3.
Copiar los archivos intl3_svn.dll y libdb44.dll, que se encuentra en svn-win32-1.4.4/bin, en APACHE_INSTALL_DIR/bin
4.
Añadir las siguientes líneas (en la sección donde está la carga de librerías) al archivo APACHE_INSTALL_DIR/conf/httpd.conf para cargar las correspondientes librerias:
1.
LoadModule dav_svn_module modules/mod_dav_svn.so
2. LoadModule authz_svn_module modules/mod_authz_svn.so
3. LoadModule dav_module modules/mod_dav.so
5. LoadModule dav_fs_module modules/mod_dav_fs.so
6.
Añadir la siguiente línea (al final) al archivo APACHE_INSTALL_DIR/conf/httpd.conf para cargar la configuración de subversion:
1.
Include “APACHE_INSTALL_DIR/conf/extra/httpd-subversion.conf”
7.
Creamos el archivo APACHE_INSTALL_DIR/conf/extra/httpd-subversion.conf con la siguiente configuración (es sólo un ejemplo):
1.
DAV svn
SVNParentPath “C:/tools/wamp/tmp/svn”
AuthzSVNAccessFile “C:/tools/wamp/Apache2/conf/access-policy/svn-groups.conf”
AuthType Basic
AuthName “Subversion repository”
Require valid-user
AuthUserFile “C:/tools/wamp/Apache2/conf/access-policy/svn-users.conf”
2. Cuidado con las rutas eso es sólo un ejemplo. Básicamente se indica donde van a       estar    nuestros repositorios de subversion, el archivo con los grupos y usuario de subversion
8.
Ahora tenemos que crear los archivos svn-groups.conf y svn-users.conf. Para el primero de ellos tenemos:
1.
[groups]
test-group: recena
[test:/]
@test-group:rw
1.
Definición de grupos y a continuación, nombre del repositorio (que tendremos que crearlo) y permisos del grupo sobre el raiz del repositorio.
2.
Para crear un usuario, hacemos uso de la utilidad htpasswd que nos proporciona Apache.
Para crear el repositorio hacemos uso de la utilidad svnadmin que proporciona subversión.

CÓMO CREAR REPOSITORIO

El repositorio básico de Subversion se crea en una máquina, generalmente dedicada, que va a actuar como servidor principal de desarrollo y es a esta máquina a la que tienen que acceder todos los clientes tanto para actualizar sus proyectos como para subir los cambios nuevos.

Para crear un repositorio nuevo donde albergar los proyectos, se usa el siguiente comando:
root@server:~:# svnadmin create /path/to/repository
Con este comando, en el directorio dado, creamos todos los archivos necesarios para que dicho directorio se comporte como un repositorio de Subversion. Debajo de este directorio se guardarán todas las versiones de nuestros proyectos así como la configuración de dicho repositorio y algunos elementos para la seguridad de acceso.
Además de tener el repositorio en la máquina servidor, es necesario tener una aplicación corriendo, svnserve, para que se pueda acceder de forma remota al repositorio. Este servidor viene cuando se instala Subversion y para arrancarlo basta con utilizar el comando siguiente:
root@server:~:# svnserve -d -T -r /path/to/repository
Con la opción -d hacemos que svnserve se comporte como un daemon, con -T hacemos que use threads en lugar de procesos y con -r indicamos donde está el repositorio.
En caso de que queramos arrancarlo cada vez que se inicie el sistema, será necesario configurar un script de inicio que hay que ubicar en el directorio /etc/init.d/ (en máquinas Debian y Ubuntu). Un ejemplo de este script se puede ver en el Anexo A de este documento.
Una vez funcionado el repositorio, para acceder al mismo mediante el comando svn, es necesario poner la ruta de la misma forma que una URL. Un ejemplo podría ser el siguiente (lista los contenidos del repositorio):
diego@server:~:$ svnlist svn://servidor/repositorio

Seguridad básica en un repositorio de Subversión
La configuración de la seguridad en un repositorio de Subversion se encuentra en el directorio /ruta/al/repositorio/conf. En en este directorio se encuentran tres archivos de configuración para el servidor svnserve junto con la seguridad de acceso al mismo:
authz : En este archivo se definen los grupos de usuarios del repositorio y sus correspondientes permisos. Con esto se consigue que sólo determinados usuarios tengan acceso de lectura y escritura y otros sólo de lectura.

passwd : En este archivo de definen los usuarios y contraseñas de todos los usuarios que pueden acceder al repositorio. Hay que tener cuidado con este archivo ya que las contraseñas no están encriptadas (uno de los grandes fallos del svnserve). Si se requiere que las contraseñas estén encriptadas, se debe usar mod_dav mediante Apache (http) para el acceso al repositorio.
svnserve.conf : En este archivo está la configuración del servidor svnserve para el acceso remoto al repositorio con los siguientes campos:
o anon-access = [none | read | write] : Con none, nadie puede acceder al repositorio para lectura si no tiene usuario y contraseña. Con read pueden acceder todos sólo para lectura. Y con write pueden acceder todos sin usuario ni contraseña para lectura y escritura (esto no está recomendado ya que no se controlan los usuarios que hacen los cambios).
o auth-access = [none | read | write] : Aquí basta con poner write para que todos los usuarios necesiten usuario y contraseña para acceder al repositorio como lectura y escritura.
o password-db : Indica la ubicación de un archivo de contraseñas.
o auth-db : Indica la ubicación del archivo de reglas de acceso a usuarios y grupos.
o realm : Indica el nombre del repositorio.
Además de esta configuración básica, se puede usar Subversion mediante un túnel por SSH poniendo las URL de la forma svn+ssh://servidor/repositorio/. Para ello es necesario configurar el servidor svnserve añadiendo la clausula [tunnels] en svnserve.conf e indicando cual va a ser el programa de tunneling (rsh = ssh, por ejemplo).

PRINCIPALES COMANDOS

update : Actualizar la copia local del proyecto con la versión más reciente del repositorio.
commit : Subir al repositorio los cambios realizados en la copia local. Además, hay que poner un mensaje de lo que se ha hecho en dichos cambios (con -m o mediante el editor que esté en la variable de entorno $SVN_EDITOR).
add : Con este comando se añade un nuevo archivo al repositorio. Hay que tener en cuenta que sólo se marca como añadido y hasta que no se haga el commit no se añade realmente.
checkout : Para descargar por primera vez una copia remota del proyecto a la máquina local.
revert : Restituye el archivo de copia de trabajo con los cambios de la última versión de la que se ha actualizado la copia local. Este comando no contacta con el servidor.
list : Lista los contenidos de un directorio dentro del repositorio.
• status : Comprueba el estado de los archivos de la copia local con respecto a la última actualización de dicha copia. No realiza ninguna conexión con el repositorio.
info : Muestra información de algún directorio de algún proyecto del repositorio.
lock : Bloquea una ruta en el repositorio para que ningún usuario pueda hacer commit sobre dicha ruta.

WEBGRAFÍA.

http://polaris.dit.upm.es/~rubentb/docs/subversion/TutorialSubversion/index.html
http://polaris.dit.upm.es/~rubentb/docs/subversion/TutorialSubversion/ar01s06.html#N10A5F

No hay comentarios:

Publicar un comentario en la entrada