Servidor SVN

Este servicio nos permite mantener un Control de Versiones que es el arte del manejo de los cambios en la información, pudiendo ser esta un código, una aplicación, documentos, esquemas, etc…

Este tema ha sido durante mucho tiempo un tema crítico para los desarrolladores o programadores, quienes normalmente emplean su tiempo en hacer cambios en el software y después deshaciendo esos cambios o realizando otros.

Pero la utilidad del Software de Control de Versiones se extiende mucho más allá de los límites del mundo del desarrollo de software. Allá en donde pueda encontrarse gente frente a computadores manejando información que es modificada a menudo, hay un gran espacio para el Control de Versiones y aquí es donde entra el juego SubVersión o SVN.

Que es Subversión

Esquema SVN Subversión es un sistema de control de versiones libre y de código fuente abierto.

Es decir Subversión maneja archivos y directorios a través del tiempo. Hay un árbol de archivos en un repositorio central.

El repositorio es como un servidor de archivos común, excepto porque recuerda todos los cambios hechos a sus archivos y directorios.

Esto permite recuperar versiones antiguas de sus datos, o examinar el historial de cambios de los mismos, esto permite desde este punto de vista, disponer de una maquina del tiempo para los archivos.

Subversión puede acceder al repositorio definido a través de redes, lo que permite ser usado por personas que se encuentran es distintas máquinas o distintos lugares físicos.

Bueno conociendo estos rasgos generales podemos dedicarnos a la configuración y puesta en servicio del sistema de control de versiones.

Instalando el Servidor

Lo primero que debemos hacer es instalar el Servidor de Subversión, este es una máquina corriendo algún Unix para la implementación del sistema, en nuestro caso hemos puesto en servicio un FreeBSD-7.1 como servidor de Subversión.

Como instalamos Subversión

La instalación en FreeBSD es bastante simple, así como tambien en otros sistemas operativos como Debian, Fedora y otros, aquí nos concentraremos en FreeBSD.

  La instalación de Subversión:
  # cd /usr/ports/devel/subversion && make install clean

Con ello queda instalado el servidor de versiones en nuestro sistema.

Como corremos el Servidor

Uno de los detalles importantes antes de correr el servicio, es que el administrador tenga conciencia que no debemos correr este servicio con privilegios de root, para ello generamos un usuario y grupo que correrá el servicio, esto limita fuertemente las posibilidades de que puedan aprovecharse de correr otros servicios o comandos de administrador sobre el servidor de desarrollo.

Crear Grupo y Usuario

Para realizar esta tarea en nuestra maquina FreeBSD, lo que haremos es correr los siguientes comandos:

  Crear Grupo:
  # pw groupadd developer
  
  Creamos al Usuario:
  # pw useradd svn -g developer

Con los comandos anteriores tenemos creados al grupo y al usuario, al cual lo hemos agregado al grupo developer.

Como corremos el Servicio SVN

Antes de ejecutar un comando, lo que debemos tener en cuenta es que correremos el servicio como demonio y no bajo plataforma WEB, esto es porque simplemente ocupa menos recursos, su ejecución en notoriamente más rápida y requiere menos recursos de máquina.

Teniendo esto en cuenta, lo que haremos es conectarnos a la maquina via SSH como usuario svn. Suponiendo que tenemos un directorio creado que llamaremos /home/repositorios y que corresponde al $HOME del usuario svn.

  ssh svn@dartagnan  --> Nos logeamos correctamente
  
  Si estamos logeados y en el home del usurio.
  $ svnserver -d -r /home/repositorios

El servicio SVN habre el puerto 3690 udp/tcp, cosa que podemos ver con un nmap y lo que además hemos logrado es correr el servicio como usuario y no como root, esto no nos deja tomada la terminal y podemos verificar el servicio con el comando ps -aux.

Como creamos un Proyecto?

Para crear proyectos, lo que debemos hacer es logearnos en la maquina servidora como usuario dueño del repositorio, una vez dentro de la maquina que proporciona el servicio, lo que haremos es ejecutar el siguiente comando:

  $ svnadmin create --fs-type fsfs nombre_del_proyecto

Lo que hace el servidor SVN es crear la estructura del repositorio completo. La cual mostramos como ejemplo:

   svn  developer  229 Jan 30 11:32 README.txt
   svn  developer  512 Jan 30 11:35 conf/  --> Aquí dentro definimos la configuración del proyecto.
   svn  developer  512 Jan 30 15:44 db/
   svn  developer    2 Jan 30 11:32 format
   svn  developer  512 Jan 30 11:32 hooks/
   svn  developer  512 Jan 30 11:32 locks/

Se muestran sólo en owner, group, tamaño, fecha, hora y nombre de archivo y directorio. Dentro del directorio conf/, es donde SVN pone los archivos de configuración del repositorio que hemos creado recientemente, el que contiene tres archivos, estos son:

   svn  developer  1080 Jan 30 11:32 authz
   svn  developer   309 Jan 30 11:32 passwd
   svn  developer  2278 Jan 30 11:35 svnserve.conf

El archivo que define las políticas de funcionamiento del servidor SVN es svnserve.conf.

Clientes de SVN

Los clientes SVN que deben correr en las maquinas donde se encuentran los repositorios locales, es decir por el lado del usuario, hay varios clientes graficos (kdesvn, gnubversion y otras), pero lo mejor es trabajar por consola, ya que ahí se sabe con claridad que está pasando con el servicio y que cosas se han realizado con los repositorios centrales.

Como bajamos el Proyecto al Repositorio local

Para bajar un proyecto, lo que debemos hacer por el lado del cliente es disponer de un directorio de trabajo en donde dejaremos nuestra copia local del proyecto, aquí se generarán todos los archivos de control del proyecto y nos permitirá actualizar el repositorio central o bajar las ultimas versiones de los archivos que se encuentren en este.

Para realizar una copia local del proyecto, debemos crear un directorio de trabajo y cambiarnos dentro de este y correr solo la primera vez el comando para la generación del proyecto como copia local, para ello corremos en nuestra consola:

   $ svn checkout svn://dartagnan/nombre_del_proyecto  ==> Comando largo del checkout
   $ svn co svn://dartagnan/nombre_del_proyecto        ==> Comando corto del checkout

El cliente SVN se comunica con el servidor central donde se encuentra el repositorio del proyecto identificado con nombre_del_proyecto y genera en el directorio donde estamos parados (nuestro espacio de trabajo local), los contenidos de los archivos de control del proyecto que los deja en unos subdirectorios escondidos definidos como .svn/, dentro de nuestro directorio de trabajo local. Con esto tenemos todo lo necesario ya para poder trabajar sobre nuestros archivos.

Espacio local de Trabajo

Al realizar nuestro primer contacto con el servidor SVN, corriendo el “svn checkout”, como hemos visto se han creado sólo los archivos de control del proyecto pero en verdad no se ha creado nada del proyecto en si, por lo que ahora veremos como empezar a definir las cosas dentro del proyecto.

Estructura de Directorios

Existen varios modelos pero la propuesta es a tener una estructura mas universal, la cual pasaremos a indicar, existen 3 directorios en la raíz del proyecto, estos son:

 TRUNKs - Directorio principal de desarrollo del proyecto. Aquí se deja la documentación, requerimientos, diseño del proyecto y código fuente.
 TAGs - Directorio de marcas del desarrollo, iteraciones (cada vez que se termina una, se copia aqui TRUNK) y releases o versión terminada.
 BRANCHs - Directorio en donde se hacen las bifurcaciones del proyecto, es decir son derivaciones distintas generadas a partir del proyecto principal.
Definiciones Generales

TRUNK Este es el directorio raíz o principal del proyecto en donde se deben generar la documentación detallada de este, entre esta la toma de requerimientos, el análisis, diseño, implementación, pruebas de concepto, los manuales del usuario, manual de instalación, manuales de administración si son necesarios y la documentación de la puesta en servicio.

TAGs Directorio de marcas del desarrollo, en donde se encuentran las iteraciones y los releases.

  • Iteraciones: Cada vez que se termina una iteración, se hace una copia del TRUNK aquí con el formato YYYYMMDD_ITER_Nro
  • Releases: Cada vez que se entrega el producto, se hace una copia de la iteración que generó el release aquí, con formato YYYYMMDD_RELEASE_Nro.

BRANCHs Este directorio es creado para generar en él copias que pueden servir del proyecto original para generar un subproducto o para una determinada versión de un código o parte de él que pueda ser utilizado en otro proyecto.


Como incorporamos estos Directorios al Proyecto

Para incorporar estos directorios al proyecto en nuestra copia local del mismo, debemos correr una serie de comandos SVN para generar la estructura indicada como parte del proyecto, esto es:

  snv mkdir trunk
  svn mkdir tag
  svn mkdir branch

En nuestra copia local del proyecto con estos comandos sólo lo creamos, pero aún se encuentran en nuestra copia local y no hemos subido estas modificaciones al REPOSITORIO CENTRAL del proyecto, esto lo hacemos de la siguiente forma:

 svn commit -message "Hemos creado la estructura base del proyecto" ==> Este es el formato del comando largo.
 svn ci -m "Hemos creado la estructura base del proyecto"           ==> Este es el formato del comando corto.

Si bien hasta ahora hemos logrado subir el repositorio local al REPOSITORIO CENTRAL, lo que no hemos hecho hasta ahora es SINCRONIZAR ambos repositorios, esto es necesario para que los LOG's y las versiones sean las mismas en ambos repositorios, aún cuando sea generada la versión en la misma máquina local, para ello debemos correr:

 svn update ==> Comando para actualizar en el repositorio local, la misma versión del repositorio central.
 svn up     ==> Mismo comando anterior pero en formato corto.

Tenemos algunas formas de validar las actualizaciones, esto significa que podemos chequear antes de hacer modificaciones al repositorio central las diferencias o estatus que nos proporcionarán información suficiente para determinar si estamos con la copia local actualizada, esto lo hacemos con los siguientes comandos:

 svn status ==> Nos indica si el repositorio local ha sufrido modificaciones y cuales son.
 svn diff   ==> Nos muestra las diferencias entre nuestro repositorio local y el central del proyecto.
 svn log    ==> Nos muestra los eventos ocurridos hasta nuestra última actualización del repositorio.

Si con esta información que es bastante, determinamos que hemos realizado varias modificaciones y no están reflejadas en el repositorio central, además si estamos seguros que estas nuevas copias de los archivos están en versiones mostrables al resto de los desarrolladores o se encuentran en estado de desarrollo usable, procedemos a realizar un commit, depues un update.

/var/www/html/data/pages/informatica/svn_server.txt · Última modificación: 18/01/2019 16:22 (editor externo)
Recent changes RSS feed Creative Commons License Donate Minima Template by Wikidesign Driven by DokuWiki