== Sistema para el control de versiones: SVN == '''Introducción.''' El control de versiones permiten a un grupo de desarrollo, colaborar de manera organizada, evitando solapamiento de las modificaciones en los archivos, y mantener históricos de modificaciones. Acopia todos los archivos en versiones de forma centralizada, permitiendo el trabajo de cada colaborador en sus propias copias de trabajo. SVN: Es software libre bajo una licencia de tipo Apache/BSD y se lo conoce también como Subversion. Proviene del muy utilizado CVS, pero con muchas ventajas. 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 cierto punto del tiempo. '''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. * Se envían sólo las diferencias en ambas direcciones, no todo el archivo. * Puede ser servido, mediante Apache, sobre WebDAV/DeltaV. Esto permite que clientes WebDAV utilicen Subversion en forma transparente. * Maneja eficientemente archivos binarios, no los trata como 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 la autenticación por medio de Sql, ldap, Ssl. '''Servidores de SVN''' Existen a la disposición de los grupos de desarrollo, dentro de la Internet sitios web que permiten alojar proyectos de desarrollo colaborativo y que ofrecen dentro de sus servicios, repositorios para alojar las versiones de los archivos, por ejemplo SourceForge, Berlios, tigris, o uno dce los mas recientemente utilizados como lo son GoogleCode, etc. En la Fundación Cenditel esta instalado un servidor para la administración de los proyectos el cual brinda entre sus servicios un control de versiones por medio de la herramienta SVN. '''Creación de un servidor SVN''' El sistema para el control de versiones Subversion, esta en los repositorios de las principales distribuciones para el sistema operativo Linux, por lo que teniendo una conexión a internet, y configurando una conexión con dichos repositorios, por ejemplo en Debian, modificando el archivo que se source.list que se encuentra ubicado en el directorio: /etc/apt/ podemos realizar la instalación para conformar nuestro servidor: ''previamente instalamos apache'' {{{ aptitude install apache }}} ''ahora si instalamos el svn:'' {{{ aptitude install subversion }}} No se presenta mayor configuración, simplemente utilizamos el comando para crear el repositorio, que incluirá en él su tronco principal y sus ramas, ejecutando el comando: {{{ cd /var/local/www }}} {{{ svnadmin create reposito }}} podemos subir inicialmente en él el contendio de algun directorio para que contenga la carga inicial, recuerde que los desarrolladores trabajan en su copia de trabajo en sus computadores y luego sincronizarán con el repositorio central. Para la carga del repositorio en su fase inicial su utiliza el comando: {{{ svn import [origen] http://svn.servidor.ext/repositorio}}} Observer que el acceso es por medio de una dirección URL, ya que se utiliza la potencialidad de la red internet para poder accesar a este, con lo cual previamente en el servidor debe estar instalado un servicio web, el mas comunmente utilizado es el apache y para el cual se debe configurar un virtual host, es de libre elección la autenticación por medio de busqueda de los usuarios en una base de datos, o por medio de una herramienta como webdav o ldap, o por el medio mas simple que es con password ubicados en un archivo. se presenta a continuación un ejemplo de como podria configurar un virtual host: {{{ ServerName svn.sitioweb.ext ServerAdmin correo@sitioweb.ext DocumentRoot /var/local/www/repositorio Options Indexes +Multiviews -FollowSymLinks IndexOptions FancyIndexing \ ScanHTMLTitles \ NameWidth=* \ DescriptionWidth=* \ SuppressLastModified \ SuppressSize Order allow,deny allow from all AddDefaultCharset UTF-8 DirectoryIndex index.html # Subversion host configuration ErrorDocument 404 default DAV svn SVNParentPath /var/lib/svnroot SVNAutoversioning on #SVNAutoversioning off SVNIndexXSLT /svnindex.xsl AuthType basic AuthName "Subversion User Authentication" #AuthUserFile /etc/apache2/dav_svn.passwd Auth_PG_host 127.0.0.1 Auth_PG_database db_nombre Auth_PG_port 5432 Auth_PG_user db_usuario Auth_PG_pwd clavedeacceso Auth_PG_pwd_table tablausuarios Auth_PG_pwd_field campodepassword Auth_PG_uid_field campodelogin Auth_PG_encrypted on Auth_PG_hash_type MD5 Auth_PG_authoritative on #Satisfy Any Require valid-user php_flag engine off ErrorLog /var/local/log/svn.fsl-error.log CustomLog /var/local/log/svn.fsl-access.log combined ServerSignature Off #Seguridad # SSLEngine on # SSLCertificateFile /etc/apache2/ssl/test/svn.crt # SSLCertificateKeyFile /etc/apache2/ssl/test/clave.svn2.pem #SSLCertificateFile /etc/apache2/ssl/test/clave.svn2.pem #SSLCACertificateFile /etc/apache2/ssl/test/svn2.crt }}} Este archivo debe estar en /etc/apache/site-available ''y se debe habilitar por medio del comando:'' {{{ a2ensite svn.sitioweb }}} Una vez habilitado el repositorio y asignado los permisos podemos realizar una copia de trabajo en nuestros computadores: {{{ svn ckeckout http://svn.sitioweb.ext/repositorio [destino] }}} o por medio de las herramientas gráficas que se explican a continuación. '''Clientes SVN''' Los miembros del grupo de desarrollo, obtienen una copia para su trabajo (desarrollo y pruebas), lo cual denominamos clientes del repositorio, este puede ser sincronizado por medio de lineas de comando, o por medio de interfaz gráfica según el sistema operativo que se esta utilizando, entre los mas conocidos para usuarios de Debian, están: eSVN, RapidSVN, o los Plugin para herramientas para el desarrollo Eclipse; entre muchas otras. Ejemplo para utilizar el RapidSVN, con un repositorio del servidor de la Fundación Cenditel, en el proyecto: “Plataforma para el Desarrollo de Software Libre". Pasos preliminares: Instalar el cliente desde los repositorios de Debian {{{ aptitude install rapidsvn }}} para la traducción al castellano obtenemos el archivo rapidsvn.po desde el sitio del proyecto: http://rapidsvn.tigris.org/issues/show_bug.cgi?id=505 intalamos las heramientas gettext y poEdit {{{ aptitude install gettext poEdit }}} Editamos y compilamos el archivo, (el poEdit al cerrar por configuración crea el archivo .mo) ejecutamos la librería para incluirlo como lenguaje: {{{ /var/lib/dpkg/info/rapidsvn.postinst rapidsvn.mo }}} Luego debemos crear un directorio en nuestra carpeta de usuario: {{{ mkdir /home/usuario/directorio }}} para nuestro ejemplo utilizaremos “pdsl“ por lo que se debe ejecutar: {{{ mkdir /home/usuario/pdsl }}} Si utilizamos gnome podemos encontrar el acceso en el menú: {{{ Aplicaciones >> Otros >> RapidSVN }}} Debe aparecer la siguiente interfaz gráfica: {{attachment:grafico1.png|grafico1.png}} posteriormente se crea la copia de trabajo del repositorio central, en nuestro computador. En el RapidSVN, accedamos a la opción: Repositorio >> Comprobación {{attachment:grafico2.png|grafico2.png}} Colocamos en la URL: http://svn.fsl.cenditel.gob.ve/svn/pdsl y en el Directorio del destino: /home/usuario/pdsl aceptar los cambios y obsevar que la ejecución y mensajes de resultados aparece en la parte inferior de la herramienta, si no hay ningún problema observamos que en el árbol de marcadores aparece nuestro repositorio, con todas sus ramas y el tronco principal. Interfaz Gráfica para buscar las diferencias entre el repositorio original y la copia de trabajo: Instalar el meld: {{{ aptitude install meld }}} Configurarlo en las preferencias del RapidSVN Ver >> Preferencias y en la pestaña Programas de la ventana emergente colocar las direcciones donde se encuentran los ejecutables de los programas de preferencia que se utilizarán: Editor Estandar /home/usuario/Komodo/bin/komodo nuestro caso utilizaremos OpenKomodo y para el la herramienta Diff (para encontrar las diferencias entre las versiones) /usr/bin/meld Ya odemos editar nuestra copia de trabajo y subir las modificaciones versionadas al nuestro repositorio en el Gforge de la Fundación Cenditel. Para la edición ubicamos el archivo que queremos trabajar o modificar, un vez ubicado y colocados sobre él, se presiona F3 o por medio del menú desplegable, que se abre con el boton derecho elegimos la primera opción Editar. Observe que se abre la herramienta OpenKomodo previamente seleccionada en las preferencias. Guardamos los cambios y podemos observar el cambio de estatus en el RapidSvn, colocando la etiqueta modificado. Este es una de las grades ventajas de utilizar esas herramientas de acceso gráfico, más que las lineas de comando. {{attachment:grafico3.png|grafico3.png}} Luego de la edición podemos utilizar la herramienta de comparación para buscar las diferencias: Ubicado el archivo con el botón derecho del mouse abrir el menú desplegable y utilizar la opción Diff... Esta opción apertura la herramienta Meld que en dos columnas nos muestra la difrencias entre dos versiones del mismo archivo la actual y la seleccionada. {{attachment:grafico4.png|grafico4.png}} Luego de seleccionar la revisión observamos las diferencias entre las dos columnas o ventanas de la herramienta: línea a línea. {{attachment:grafico5.png|grafico5.png}} De esta forma podemos utilizar de forma correcta las herramientas que se encuentran a disposición y que facilitan el desarrollo colaborativo