sábado, 8 de enero de 2011

Subversion

¿Qué es Subversion?

Subversion es una herramienta open source diseñada exclusivamente para sustituir a su antecesor, CVS. Subversion ha sido diseñado según una arquitectura cliente-servidor, en donde cada programador edita el código localmente y lo “sube” a un repositorio central, el servidor Subversion.

¿Para qué sirve?

Subversion es una aplicación para el control de versiones que nos permite gestionar los cambios y versiones que realizamos en nuestros desarrollos de una forma sencilla

¿Cómo funciona?

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 obtener 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 estábamos cambiando, Subversion combinará los archivos. Solo en ocasiones especiales pueden surgir conflictos, es decir, cambios que no son posibles combinar; en ese caso Subversion nos permitirá ver las diferencias y elegir cómo queremos resolverlas.

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.
  • No es posible renombrar un fichero o eliminar un directorio que tenga archivos dentro

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.


Creación de Repositorios


El procedimiento para crear repositorios en Subversion es el siguiente:

· Primero debemos autentificarnos vía SSH en el servidor de SVN.

· Con privilegios de SuperUsuario (root), debemos ejecutar el comando: svnadmin create –fs-type fsfs /var/svn/NOMBRE_DEL_REPOSITORIO. Este comando simplemente creará el repositorio en el directorio de SVN ubicado en /var/svn. Luego es necesario modificar los permisos del directorio para que el Apache tenga acceso a este con el comando: chown www-data.subversion –R /var/svn/NOMBRE_DEL_REPOSITORIO.

Agregar Usuarios al Subversion

Para Agregar usuarios al Subversion, es necesario editar dos ficheros.

Fichero Authz.

En este fichero se almacenan los permisos de los usuarios a los repositorios, esta conformado por las siguientes directivas:

Directiva Groups:


[groups]
admins = usuario1,usuario2

En esta directiva se crean los grupos de usuarios, y se asignan los usuarios pertenecientes a estos separados por comas (,) como se muestran en el ejemplo anterior. Cada grupo de usuarios se debe crear en una línea diferente y se pueden asignar cuantos usuarios sean necesarios.

Directiva de Repositorios:


[repo1:/]
@admins = rw

* =

En esta directiva se asigna la permisología a cada repositorio existente, se encierra entre corchetes [ ] el nombre del repositorio de la forma que se indica arriba. Luego se asignan los grupos que tendrán acceso a este y el tipo de acceso que tendrán “r” para lectura y “w” para escritura. Por último se le quitan los permisos a los demás usuarios con “* =”
Se pueden poner tantos repositorios como sean necesarios.

El segundo fichero es el passwd-digest

Este fichero contiene los usuarios con el Shadow Password el cual podemos copiar de algun servidor, o generar un nuevo password con el htpasswd en linux.

Haciendo Respaldo de Repositorios.

Cuando sea necesario respaldar los archivos, revisiones, Tags, y Branches del Subversion se deberá realizar con el admin del subversión ejecutando el siguiente comando.

SVNADMIN DUMP /var/svn/NOMBRE_DEL_REPOSITORIO > respaldo.txt
De esta forma se generará un fichero con el respaldo de nuestro repositorio en formato TXT, el cual podremos restaurar cuando lo deseemos de la siguiente forma:

SVNADMIN LOAD /var/svn/NOMBRE_DEL_REPOSITORIO <>

De esta forma no se respaldan configuraciones inherentes al Subversion únicamente al repositorio.



Fuentes:

http://wbrenesc.blogspot.com/2010/01/manual-de-instalacion-de-subversion.html

http://gim.unex.es/blogs/ljarevalo/2010/03/03/subversion-en-netbeans/

http://es.wikipedia.org/wiki/Subversion

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

No hay comentarios:

Publicar un comentario