sábado, 8 de enero de 2011

SUBVERSION

Que es
Subversion es un sistema de control de versiones diseñado específicamente para reemplazar al popular CVS. Es software libre bajo una licencia de tipo Apache/BSD y se le conoce también como svn por ser el nombre de la herramienta utilizada en la línea de órdenes.
Como Funciona

  • Subversión 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).

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 Subversión 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.
Como Instalarlo
CVS es el sistema de control de versiones concurrentes más utilizado en el mundo del software libre, sin embargo es bastante arcaico (nació en 1985) y tiene bastantes carencias, como son la falta de versionado de directorios, de renombrado o de copias; su uso poco eficiente de la red o el que no almacene archivos binarios completos, solo los cambios entre versiones.
Subversión es un CVS de código abierto, bajo una licencia del tipo Apache/BSD, que nació como alternativa a CVS y que intenta solucionar estos problemas y carencias. Tenemos multitud de alternativas a CVS aparte de Subversión, por ejemplo GNU Arch del que he oído muchas alabanzas y ninguna crítica, pero en esta entrada nos centraremos en Subversión por ser el más popular.
Lo primero es lo primero. ¿A qué se refiere el control de versiones? Estamos hablando de controlar los cambios que realizan los programadores sobre el código fuente (o cualquier otro tipo de usuario sobre un documento cualquier que tenga varias versiones) de forma que no se produzcan inconsistencias por trabajar más de una persona con el mismo documento y se pueda volver hacia atrás en las versiones de forma cómoda o se pueda comprobar los cambios o los errores corregidos en cada versión.
Vamos a ver ahora su instalación en sistemas Windows. Lo primero que tenemos que hacer es descargar Subversion desde su página web, donde podemos encontrar una versión comprimida o una versión que incorpora un instalador para facilitar más aún las cosas.
Una vez instalado deberíamos poder ejecutar Subversion de forma local escribiendo svn en la consola. Esto bastaría si no fuéramos a utilizar Subversion en red. En el caso de que si vayamos a hacerlo necesitamos instalar además un servidor web como Apache.
Para comenzar a trabajar con Subversion tenemos que crear un repositorio primero. Un repositorio es donde se va a guardar todas las versiones de nuestro proyecto. Supongamos que queremos crear el repositorio en C:/Documentos/Proyectos, primero nos moveríamos a ese directorio en la línea de comandos y luego usaríamos la herramienta svnadmin para crear el repositorio:
svnadmin create repositorio
Esto crearía un directorio C:/Documentos/Proyectos/Repositorio para actuar como mi repositorio.
Para activar la posibilidad de usar Subversion en red vía Apache necesitamos copiar el módulo mod_dav_svn.so de la carpeta httpd en el directorio donde se instaló subversión a la carpeta de módulos (modules) de Apache tras lo cual editamos nuestro httpd.conf para informar a Apache de la existencia del nuevo módulo. Buscamos la línea
#LoadModule dav_module modules/mod_dav.so
La descomentamos (quitamos el #) y añadimos también
LoadModule dav_svn_module modules/mod_dav_svn.so
Copiamos también las dll de la carpeta bin de Apache y de Subversion al directorio modules para que puedan ser accedidas por los módulos y añadimos al final del httpd.conf lo siguiente
<Location /repos>
DAV svn
SVNPath c:/documentos/proyectos/repositorio
AuthType Basic
AuthName “Repositorio Subversion”
AuthUserFile c:/programas/Apache2/usuarios.txt
# Cualquiera puede leer, para otras operaciones
# hay que estar autentificado.
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
</Location>

Con esto creamos un repositorio ficticio repos y le indicamos la ruta a él (notad que las barras no son invertidas en las rutas, además si hay espacios en las rutas tenemos que incluir la ruta entre comillas). Además pedimos que los usuarios se autentifiquen para poder realizar cualquier operación que no sea la lectura, comparando el nombre de usuario y contraseña introducidos con la información sobre los usuarios del fichero c:/programas/Apache2/usuarios.txt (nota: dado que no estamos utilizando una conexión segura se podrían capturar las contraseñas usando un sniffer).
El archivo usuarios.txt no existe por defecto, es simplemente un archivo que crearemos nosotros utilizando la herramienta de Apache htpasswd que se encuentra en el directorio bin de la carpeta de Apache y que nos sirve para crear una clave de tipo MD5.
htpasswd -mc c:/programas/Apache2/usuarios.txt Zootropo
htpasswd -m c:/programas/Apache2/usuarios.txt Otro
Le indicamos donde queremos guardar el fichero de contraseñas (en el caso de que la ruta tenga espacios la escribimos entre comillas) y qué nombre de usuario queremos, tras lo cual nos pedirá la contraseña a utilizar para ese usuario. Fijaos en que para el primer usuario que creemos (Zootropo) hay que añadir también el flag c para que cree el fichero.
Si reiniciamos el servidor ahora deberíamos poder acceder al repositorio vía web. Abrimos el navegador de internet y en la barra de localización escribimos http://127.0.0.1/repos/. Si nos sale un mensaje de página no encontrada algo ha fallado.
Ahora que el servidor CVS ya está listo necesitamos un cliente CVS para trabajar con él. Subversión incluye herramientas de línea de comandos para este fin, pero es más cómodo utilizar una interfaz gráfica como la de TortoiseSVN

 Como Crear Repositorios

Servidor subversion como servicio de windows

Si el instalable no nos monta subversion como servicio de windows, podemos hacerlo de la siguiente manera. El ejecutable de servidor de subversion es svnserve.exe. Para crear un servicio con él debemos ejecutar el comando sc que viene con Windows de la siguiente manera, con permisos de administrador
sc create svnserve binpath= "c:\svnserve\svnserve.exe --service
    --root c:\repos" displayname= "Subversion" depend= tcpip
    start= auto
Donde svnserve es el nombre que queremos dar al servicio, binpath contiene el comando a ejecutar (svnserve.exe con sus opciones) y dentro de él –root apunta al directorio donde están nuestros repositorios de subversion). displayname es el nombre que queremos que se vea para el servicio, depend es una dependencia del servicio, que depende de tcpip. Y start=auto indica que se arranque automáticamente al encender el ordenador.

Crear repositorios
En el directorio donde hemos indicado que estarán nuestros repositorios, podemos crear repositorios para nuestros proyectos. Para ello, vamos al directorio c:\repos y ejecutamos el comando
c:\> cd c:\repos
c:\repos> svnadmin create PROYECTO1
Esto creará un repositorio PROYECTO1

Como Crear Usuarios
Vamos al repositorio de PROYECTO1 recién creado y editamos el fichero conf/svnserve.conf. Por defecto viene con un montón de comentarios, pero en los que podemos leer claramente todas las opciones. Podemos dejar algo como esto
anon-access = read
auth-access = write
password-db = passwd
realm = PROYECTO1
Donde:
ü  anon-access = read indica permisos de lectura para usuario anónimos. Es decir, cualquiera podría sacar los fuentes para verlos, pero no podría subir los cambios.

  • auth-access = write indica permisos de lectura y escritura para usuarios autentificados.
  • password-db = passwd es el fichero donde estarán los nombres de usuario y passwords. En este caso, el fichero se llamará passwd y el path es relativo al ficherosvnserve.conf que estamos editando.
  • realm = PROYECTO1 es el nombre que verán los usuarios cuando intenten acceder al repositorio y se les pida usuario y password. Puede ser cualquier palabra o frase que queramos. También se usará como clave para cifrado si corresponde.
Podemos dejar annon-acces = none para no dar ningún permiso a usuario anónimos.
Luego, editamos el fichero passwd que se crea por defecto (o el que hayamos indicado en password-db = passwd), lo editamos y ponemos los usuarios que queramos, de esta manera
[users]
chuidiang = la-password
federico = otra-password
juana = mas-passwords

Principales Comandos
Los principales comandos para trabajar con Subversión:

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


Fuente Bibliográfica
Concepts de Subversión [en Línea] Disponible en URL: http://es.wikipedia.org/wiki/Subversion[Consulta realizada el 08 de Enero del 2011]
Commandos de Subversion [en Línea] Disponible en URL: http://www.yolinux.com/TUTORIALS/Subversion.html#COMMAND [Consulta realizada el  08 de Enero del 2011]

1 comentario:

  1. Te falta una referencia bibliográfica.... http://chuwiki.chuidiang.org/index.php?title=Montar_un_servidor_subversion_en_Windows

    ResponderEliminar