Subversion

Subversion ayuda a que los desarrolladores lleven un seguimiento de los cambios en los ficheros de código fuente de su proyecto, permitiendo la creación de usuarios para que puedan realizar los respectivas modificaciones ; también se lo conoce como un controlador de versiones empleado en la administración de archivos utilizados en el desarrollo de software o contenido  CVS considerado su antecesor  es uno de los controladores de versiones más utilizados en proyectos de software libre.

Funcionamiento: En un entorno de desarrollo típico basado en SVN, los miembros del equipo agregan, editan y eliminan los archivos en una working copy (copia de trabajo) local y luego suben esos cambios a un repositorio, en una operación conocida como commit. Subversion lleva un registro de todas las versiones de archivos del repositorio subidas por cada uno de los usuarios y permita volver a obtner cualquier versión anterior de los archivos.

Si dos usuarios están trabajando al mismo tiempo en los mismos archivos, los cambios que cada uno realice se combinarán al subirse al servidor. Del mismo modo, si bajamos una actualización (update) donde fue modificado un archivo que estabamos cambiando, Subversion combinará los archivos. Solo en ocasiones especiales pueden surgir comflictos, es decir, cambios que no son posibles combinar; en ese caso Subversion nos permitirá ver las diferencias y elegir cómo queremos resolverlas.

Aspectos fundamentales del funcionamiento de Subversion:

  • 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).
  • Para Windows, el mejor cliente es TortoiseSVN
  • Para GNU/Linux, basta subversion, la versión para línea de comandos, o RapidSVN, una versión gráfica para entornos GTK.

Ventajas de Subversion:

  • 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 y no lineal  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 de Subversion:

·         No registra cambios en la estructura de directorios: no es posible mover, renombrar ni copiar.

·         Con CVS era necesario interrumpir el acceso al repositorio para crear las copias de seguridad

·         No permite conjuntos de cambios.

·         Almacena ficheros binarios enteros.

·         No usa la red eficientemente (en CVS siempre se envían al servidor archivos completos y no sólo las diferencias que sí hace Subversion).

·         El creado de ramas y etiquetas en CVS es una operación no lineal (O(n)) siendo en Subversion de coste constante (O(1)).

·         El manejo de archivos binarios los trata internamente como si fueran de texto no como Subversion.

Como instalar Subversion en Linux:

Para realizar la instalación seguimos los siguientes pasos:

Step 1 – Instalar un servidor LAMPP

sudo apt-get apache2 php5-mysql libapache2-mod-php5 mysql-server

Step 2 – Instalar  Subversion

sudo apt-get install subversion libapache2-svn 

Step 3 – Crear un repositorio

Create the subversion repository in /svn

sudo svnadmin create /svn

Step 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:

<Location /svn>
DAV svn
SVNPath /svn
AuthType Basic
AuthName “Subversion Repository”
AuthUserFile /etc/apache2/dav_svn.passwd
</Location>

Grabe el archivo.

Step 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

Step 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.

Como instalar Subversion en 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. <Location /repos>
      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”
      </Location>
    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.
  1. Para crear un usuario, hacemos uso de la utilidad htpasswd que nos proporciona Apache.
  2. Para crear el repositorio hacemos uso de la utilidad svnadmin que proporciona subversión.

Crear un repositorio

Un repositorio es un sitio centralizado donde se almacena y mantiene información digital, como pueden ser los ficheros de un preoyecto de desarrollo de software.

Teniendo en cuenta que la base de repositorios está en el directorio /home/USUARIO/svn, debes crear todos tus repositorios en ese directorio.

Nota: La palabara USUARIO que aparece en esta guía la tienes que reemplazar por el nombre de usuario real de tu cuenta de alojamiento.

1 – Preparate tu entorno

Tener un control de versiones nos es muy útil en el ámbito de la programación, para conocer en todo momento qué archivos hemos modificado.

Configurar el entorno Shell para usar Subversion

Subversion está instalado en /opt/svn lo que supone que tienes que añadir el directorio /opt/svn/bin a tu PATH o, de lo contrario, cada vez que tengas que ejecutar el comando svn de Subversion tendrás que escribir y ejecutar:

/opt/svn/bin/svn

Para hacerlo más fácil, añadiremos /opt/svn/bin a tu PATH. Esto se hace accediendo a tu cuenta vía SSH y asegurandote que el archivo .bash_profile ubicado en tu directorio personal ( /home/<usuario> ) tenga las siguientes líneas:

PATH=$PATH:$HOME/bin:$HOME/ruby/gems/bin:/opt/svn/bin
export PATH

Nota: Puedes abrir el archivo .bash_profile usando el editor nano:

nano .bash_profile

2 – Accede vía SSH

Accede a tu cuenta vía SSH, como siempre, tal y como se explica en la guía Como acceder vía SSH a tu cuenta.

Como acceder vía SSH a tu cuenta

El acceso SSH no está habilitado de forma predeterminada en nuestros planes de alojamiento. Si necesitas acceso SSH a tu cuenta de alojamiento debes activarlo desde mi@guebs.

Activar el acceso SSH

Para activar el acceso SSH a tu cuenta de alojamiento debes acceder a mi@guebs. Luego accede a la sección “Servicios” y pincha en el icono de “Gestión técnica” de tu plan de alojamiento.

Una vez dentro en la página de Gestión técnica del plan de alojamiento pincha en “Activar acceso SSH” y sigue las indicaciones.

Datos de acceso

Para poder acceder vía SSH a tu cuenta de alojamiento, necesitas que te hayamos habilitado el acceso SSH y tener instalado en tu ordenador algún cliente SSH. Si ya cumples estos dos requisítos, los datos de acceso SSH son:

  • Servidor: tudominio.com
  • Puerto: 333 (¡Atención! No es el estandard 22)
  • Usuario: (el mismo que el del panel de control)
  • Contraseña: (el mismo que el del panel de control)

3 – Crear el repositorio

Para crear un repositorio llamado mirepo para tu proyecto “miapp”, debes ejecutar:

svnadmin create /home/USUARIO/svn/mirepo

Dar permisos de escritura a Apache:

chmod -R 777 /home/USUARIO/svn/mirepo

4 – Importar tu proyecto al repositorio

Suponiendo que tu proyecto “miapp” está ubicado en /home/USUARIO/miapp, la estructura de dicho directorio será:

miapp
 |
 --> branches
 |
 --> tags
 |
 --> trunk

Los directorios “branches” y “tags” estarán vacios, mientrás que los archivos de tu proyecto estarán todos en el directorio “trunk”.

Para importar tu proyecto al repositorio “mirepo” creado, debes ejecutar:

svn import /home/USUARIO/miapp http://www.tudominio.com/svn/mirepo -m "Importacion inicial"

Nota: Si tienes las Extensiones FrontPage instaladas en tu web la importación no se hará correctamente, debes desinstalar las extensiones FrontPage.

5 – Crear una copia de trabajo (Working Copy)

Ahora, debes crear una copia de trabajo del proyecto. Puedes hacerlo en el propio servidor o en tu ordenador, aunque lo lógico lo último:

svn checkout http://www.tudominio.com/svn/mirepo <directorio_local>

Es en la copía de trabajo donde tienes que continuar el desarrollo del proyecto.

6 – Realizar cambios en el repositorio

En nuestra copia de trabajo podemos modificar, añadir o eliminar cualquier archivos. Para añadir un archivo:

svn add FICHERO

O podemos eliminar un archivo:

svn delete FICHERO

Nota: FICHERO será el PATH completo del fichero que deseamos importar.

7 – Actualizar repositorio

Cuando queramos confirmar los cambios y que se apliquen en el repositorio, ejecutaremos:

svn commit -m "Actualizacion"

8 – Acceder al repositorio

Por último, puedes ver el contenido del repositorio:

svn list http://www.tudominio.com/svn/mirepo

También puedes verlo vía web accediendo a:

http://www.tudominio.com/svn/mirepo

Crear Uusuarios en linux:

Ejecutamos el comando:

# htpasswd -c /etc/svn-auth-file usuario1

La aplicación htpasswd crea un archivo en /etc/svn-auth-file e introduce un usuario con nombre usuario1 (en seguida nos pide que escribamos y confirmemos su contraseña).

Si queremos crear más usuarios, no debemos usar la opción -c, ya que esta crea un nuevo fichero, sobreescribiendo el anterior. Para el segundo y siguientes usuarios, usaremos:

# htpasswd /etc/svn-auth-file usuario2.

Si queremos borrar un usuario, podemos editar el fichero o usar la opción -D mayúscula.

Si sólo quiero dar acceso a ciertos usuarios a repositorios concretos, puedo hacerlo cambiando la linea en vhost.conf Require valid-user por Require user usuario1 usuario2.

Principales comandos:

Para trabajar con Subversion recomendamos tener instalado Tortoise SVN, Las instrucciones que siguen a continuación son teniendo en cuenta que ya tienen Tortoise SVN instalado.

Check out

La primera tarea que como programador se debe hacer es bajar una copia de trabajo en una nueva carpeta vacía; esta operación se conoce como check out. Para esto necesitaremos tener la dirección del repositorio y las credenciales para autenticarse al mismo. Al hacer el check out, nos habremos bajado una copia de la última versión del proyecto y podremos comenzar a trabajar en él. Si ya veníamos trabajando en forma local sin un repositorio, deberemos copiar los archivos desde la vieja ubicación, a la nueva carpeta que creamos como copia de trabajo.

Para realizar el check out comenzamos creando una nueva carpeta vacía, hacemos clic derecho sobre ella y aparecerá el menú contextual con la opción Check Out que instaló Tortoise SVN.

Una vez realizado el check out, ya no será necesario volver a ejecutar esta operación.

(Update) Actualizar nuestra copia de trabajo

Para actualizar nuestra copia de trabajo no debemos volver a utilizar check out. De hecho, no volveremos ir esta opción en el menú contextual de Tortoise SVN una vez que nuestra carpeta se haya convertido en una copia de trabajo. En su lugar debemos utilizar la opción Update. Al ejecutar este comando, Tortoise SVN se conectará con el servidor y bajará las últimas actualizaciones (si es que hay) y las unirá con nuestra copia local. Es recomendable hacer un Update al menos una vez por día, al iniciar nuestra sesión de trabajo.

Realizar cambios

La modificación de archivos se lleva a cabo sin ningún cuidado especial. Directamente nos concentramos en escribir código. Los únicos cuidados fuera de lo común que debemos tener son:

  • Si creamos un nuevo archivo, debemos agregarlo al control de versiones. Para esto, hacemos clic derecho sobre el mismo y elegimos la opción Add.
  • Si queremos eliminar un archivo, debemos eliminarlo con la opción Delete del menú contextual de Tortoise SVN.
  • Si queremos renombrar un archivo, debemos utilizar la opción Rename del menú contextual de Tortoise SVN.
  • Para mover o copiar un archivo, no existe un comando en Tortoise SVN.
  • Podemos valernos de los comandos Copiar y Pegar clásicos más los comandos Add y Delete de Tortoise o bien recurrir a la línea de comandos de SVN y utilizar los comandos svn copy y svn move.
  • Por último, si queremos deshacer los cambios hechos desde la última actualización, podemos recurrir al comando Revert.

(Revert) Revertir

Restituye el archivo de copia de trabajo con los cambios de la ultima versión de la que se ha actualizado la copia local. Este comando no contacta con el servidor.

(Commit) Subir cambios

Para integrar los cambios que realizamos al repositorio se recomienda lo siguiente:

  1. Verificar que el código funcione bien y no impida a otros usuarios, al menos, compilar la aplicación. Si subimos un cambio que impide a que otros usuarios puedan compilar el proyecto estaremos bloqueando el avance del proyecto.
  2. Verificar que el proyecto no tenga referencias a rutas en nuestra propia PC. Idealmente, cualquier usuario debería poder bajarse el proyecto listo para compilar sin necesidad de tener que contar previamente con librerías, DLLs o archivos adicionales en lugares específicos de su entorno. Para resolver esto, usualmente creamos una carpeta REF donde copiamos todas las dependencias del proyecto.

Para subir los cambios debemos hacer clic derecho sobre la carpeta raíz de nuestra copia de trabajo y seleccionar la opción Commit de Tortoise SVN. Esto abrirá un formulario donde debemos escribir un mensaje que describa los cambios que estamos subiendo. También podremos hacer una revisión previa sobre los cambios que se subirán.

VIDEOS

http://player.vimeo.com/video/3213846

http://player.vimeo.com/video/3214439


BIBLIOGRAFIA

http://www.osmosislatina.com/subversion/basico.htm

http://www.wikilearning.com/tutorial/tutorial_de_subversion/6411-2

http://polaris.dit.upm.es/~rubentb/docs/subversion/TutorialSubversion/ar01s02.html#N10191

http://www.centraldev.net/post.php?id=50