SUBVERSION

logo-active.jpg¿QUE ES SUBVERSION?logo-active.jpg
Subversión es un sistema de control de versiones libre y de código fuente abierto. Es decir, Subversion maneja ficheros y directoriosa través del tiempo. Hay un árbol de ficheros en un repositorio central. El repositorio es como un servidor de ficheros ordinario,excepto porque recuerda todos los cambios hechos a sus ficheros y directorios.

 

subversion

Esto le permite recuperar versiones antiguas desus datos, o examinar el historial de cambios de los mismos. En este aspecto, mucha gente piensa en los sistemas de versiones como en una especie de “máquina del tiempo ”.

Subversión puede acceder al repositorio a través de redes, lo que le permite ser usado por personas que se encuentran en distintosordenadores. A cierto nivel, la capacidad para que varias personas puedan modificar y administrar el mismo conjunto de datos desdesus respectivas ubicaciones fomenta la colaboración. Se puede progresar más rápidamente sin un único conducto por el cual debanpasar todas las modificaciones.

Y puesto que el trabajo se encuentra bajo el control de versiones, no hay razón para temer porque la calidad del mismo vaya a verse afectada por la pérdida de ese conducto único—si se ha hecho un cambio incorrecto a los datos,simplemente deshaga ese cambio.

Algunos sistemas de control de versiones son también sistemas de administración de configuración de software. Estos sistemas sondiseñados específicamente para la administración de árboles de código fuente, y tienen muchas características que son específicasdel desarrollo de software— tales como el entendimiento nativo de lenguajes de programación, o el suministro de herramientas parala construcción de software.

Sin embargo, subversión no es uno de estos sistemas. subversión es un sistema general que puedeser usado para administrar cualquier conjunto de ficheros. Para usted, esos ficheros pueden ser código fuente— para otros, cualquiercosa desde la lista de la compra de comestibles hasta combinaciones de vídeo digital y más allá.

logo-active.jpg¿COMO FUNCIONA? logo-active.jpg
Copias de trabajo
Una copia de trabajo de Subversión es un árbol de directorios corriente de su sistema de archivos local, conteniendo una colección de archivos. Usted puede editar estos archivos del modo que prefiera y si se trata de archivos de código fuente, podrá compilar su programa a partir de ellos de la manera habitual. Su copia de trabajo es su área de trabajo privada: Subversión nunca incorporará los cambios de otra gente o pondrá a disposición de otros sus cambios hasta que usted le indique explícitamente que lo haga.

Tras hacer algunos cambios a los archivos en su copia de trabajo y verificar que funcionan correctamente, Subversión le proporciona comandos para “publicar” sus cambios al resto de personas que trabajan con usted en su proyecto (escribiendo en el repositorio). Si las demás personas publican sus propios cambios, Subversión le proporciona comandos para mezclar estos cambios en su directorio de trabajo (leyendo del repositorio).

Una copia de trabajo también contiene algunos archivos extra, creados y mantenidos por Subversión para ayudarle a ejecutar estos comandos. En particular, cada directorio de su copia de trabajo contiene un subdirectorio llamado .svn, también conocido como el directorio administrativo de la copia de trabajo. Los archivos en cada directorio administrativo ayudan a Subversión a reconocer qué archivos contienen cambios no publicados y qué archivos están desactualizados con respecto al trabajo hecho por los demás.

Un repositorio típico de Subversión contiene a menudo los archivos (o el código fuente) de varios proyectos; normalmente, cada proyecto es un subdirectorio en el árbol del sistema de archivos del repositorio. En esta disposición, la copia de trabajo de un usuario se corresponde habitualmente con un subárbol particular del repositorio.
Por ejemplo, suponga que usted tiene un repositorio que contiene dos proyectos de software, paint y calc. Cada proyecto reside en su propio subdirectorio dentro del directorio raíz.

Para conseguir una copia de trabajo, debe ejecutar primero un checkout de algún subárbol del repositorio. (crea una copia privada del proyecto). Por ejemplo, si usted hace un checkout de /calc, obtendrá una copia de trabajo como ésta:
$ svn checkout http://svn.example.com/repos/calc
A calc
A calc/Makefile
A calc/integer.c
A calc/button.c

$ ls -A calc
Makefileinteger.cbutton.c .svn/
La lista de letras A indica que Subversión está añadiendo una serie de elementos a su copia de trabajo. Usted ahora tiene una copia personal del directorio /calc del repositorio, con una entrada adicional—.svn—que contiene la información extra que Subversión necesita, tal y como se mencionó anteriormente.

logo-active.jpg ¿PARA QUE SIRVE? logo-active.jpg

Brevemente, Subversión ayuda a que los desarrolladores lleven un seguimiento de los cambios en los ficheros de código fuente de su proyecto. Quizá se pregunte porqué iba a necesitar un sistema de control de revisiones para sus proyectos domésticos, donde usted es la única persona que decide cómo y cuándo realizar cambios. Hay varias razones: para obtener y comparar versiones anteriores, cazar errores regresivos, mantener ramas compatibles con las versiones anteriores, producir excelentes registros de cambios (//changelogs//), trabajar sobre dos arreglos o mejoras diferentes sin confusiones. Además, conseguirá todo esto con poco esfuerzo, porque Subversion es sorprendentemente fácil de instalar.

Un //repositorio Subversion// se comporta como un sistema de ficheros que recuerda conjuntos de cambios que se le han hecho. Esto lo hace almacenando ficheros en una estructura de árbol, llevando un control de su evolución a lo largo del tiempo. El repositorio incrementa un número global de revisión con cada conjunto de cambios //enviados// (//committed//) al repositorio. Como la totalidad del árbol está versioneada, actúa como un sistema de ficheros normal. Es posible copiar y renombrar ficheros; crear una rama del proyecto es tan fácil como copiar un directorio. También se le puede pedir a Subversion que produzca una salida con las //diferencias// entre dos revisiones arbitrarias, o que recupere algún sub-árbol de la revisión //N//.

logo-active.jpgVENTAJAS logo-active.jpg
• 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.).

logo-active.jpg DESVENTAJAS logo-active.jpg
• 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.

logo-active.jpgINSTALANDO SUBVERSION logo-active.jpg
logo-active.jpg Como instalar Subversion en Linux: logo-active.jpg
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.

logo-active.jpg Como instalar Subversion en Windows: logo-active.jpg
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.

logo-active.jpgCOMO CREAR Y CONFIGURAR UN REPOSITORIO logo-active.jpg
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 Subversion
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).

logo-active.jpg ¿COMO CREAR USUARIOS? logo-active.jpg
En primer lugar se expone la configuración que se ha adoptado para administrar la autentificación y autorización de Subversion con svnserve.
A continuación se muestran los scripts implementados para administrar los usuarios de un repositorio, usuarios introducidos en el archivo passwd (base de datos de contraseñas) de cada repositorio.
Nota: Todos los usuarios, autenticados dentro del archivo de contraseñas de cada repositorio, estarán autorizados a realizar tanto operaciones de lectura como de escritura sobre dicho repositorio.

Autentificación con svnserve
La configuración por defecto de svnserve proporciona acceso anónimo de sólo-lectura. Esto significa que se puede utilizar una URL de tipo svn:// para ver el contenido del repositorio y para obtener del mismo pero no se podrá confirmar ningún cambio.

Para permitir acceso de escritura en un repositorio será necesario editar el fichero conf/svnserve.conf en el directorio del repositorio. Este fichero controla la configuración del servicio svnserve, y también contiene otra información útil.
Se podrá saber quién ha hecho cambios en el repositorio y también se podrá controlar quién puede hacer cambios en el repositorio. La forma establecida para conseguir esto es crear una base de datos de contraseñas:
[general]
anon-access = none
auth-access = write
password-db = passwd

Donde passwd es un fichero que existe en el mismo directorio que svnserve.conf. y debería tener una estructura como ésta:
[users]
usuario = contraseña

Este ejemplo denegaría cualquier acceso a los usuarios no autentificados (anónimo), y daría acceso de lectura/escritura a los usuarios listados en passwd.

Esta es la manera que se ha establecido para trabajar con los repositorios de Subversion.
Scripts para la gestión de usuarios

Existen cinco scripts destinados a realizar la administración de usuarios de los repositorios Subversion:
• Menú de opciones.
• Creación de Usuarios.
• Eliminación de Usuarios.
• Listado de Usuarios.
• Actualización de Usuarios.

Se encargarán del mantenimiento del archivo de contraseñas passwd de cada uno de los repositorios disponibles.
Nota: La administración de los usuarios de los repositorios (ejecución de estos scripts) deberá realizarla cada responsable de proyecto con el usuario creado para tal fin codAplicacion/Dpto(usuario/grupo).

Menú de opciones

menu_SVN.sh: Script relativo al menú de opciones para la administración de usuarios de los repositorios Subversion disponibles.

La instrucción adecuada para lanzar los scripts encargados de la gestión de los usuarios es la siguiente:

$ sh /repositorios_svn/bin/menu_SVN.sh

Este script nos presentará en pantalla el siguiente menú de opciones con el que se podrá acceder a la tarea deseada. Será el script principal o punto de partida de todas las operaciones relativas a la administración de los usuarios de repositorios Subversion.

Los siguientes apartados muestran el funcionamiento de cada una de las tareas presentadas en el menú de opciones:

• Alta de usuarios de un repositorio.
• Baja de usuarios de un repositorio.
• Listado de usuarios de un repositorio.
• Cambio de password de usuarios de un repositorio.

Creación de Usuarios
alta_user_SVN.sh: Script relativo al alta de usuarios de los repositorios Subversion disponibles.

En caso de elegir la primera opción del menú se ejecutará el script alta_user_SN.sh que nos permitirá autorizar el acceso de lectura y escritura a un repositorio para un usuario concreto:

Eliminación de Usuarios
baja_user_SVN.sh: Script relativo a la baja de usuarios de los repositorios Subversion disponibles.

Seleccionando la segunda opción del menú se ejecutará el script baja_user_SVN.sh. Este script nos
proporciona la posibilidad de eliminar la autorización de acceso (escritura/lectura) a un repositorio concreto para un determinado usuario:

Listado de Usuarios
listado_user_SVN.sh: Script relativo al listado de usuarios de Subversion.

La opción “Listado de usuarios de un repositorio”, evidentemente, mostrará el listado de usuarios
del repositorio seleccionado (script listado_user_SVN.sh):

Cambio de Password de Usuarios
modif_user_SVN.sh: Script relativo al cambio de password de usuarios de los repositorios Subversion disponibles.

En caso de haber elegido la opción del menú relativa al cambio de password se ejecutará el script modif_user_SN.sh que nos permitirá cambiar la contraseña de un usuario para un determinado repositorio:

logo-active.jpg PRINCIPALES COMANDOS logo-active.jpg
Estos comandos son de la forma svn [comando] y teniendo que ejecutarse en el directorio o algún subdirectorio de la copia local. Los subcomandos [comando] son alguno de los siguientes:
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.
unlock : Desbloquea rutas bloqueadas con lock.
blame : Imprime los cambios de un archivo respecto de versiones y quién los ha hecho.
merge : Une las diferencias entre dos copias de los archivos de trabajo que generalmente están en conflicto.
resolved :Indica que un conflicto ha sido resuelto.
log : Muestra los mensajes de log de la copia de trabajo. Es necesario hacer un update para que estén todos los logs del proyecto.
switch : Actualiza la copia de trabajo a un directorio distinto. Esto es útil para cambiar entre diferente branches que se verán en el siguiente punto.

logo-active.jpg BIBLIOGRAFIA logo-active.jpg
http://polaris.dit.upm.es/~rubentb/docs/subversion/TutorialSubversion/ar01s05.html
http://es.wikipedia.org/wiki/Subversion

Esta entrada fue publicada en Sin categoría. Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s