Mostrando entradas con la etiqueta SubVersion. Mostrar todas las entradas
Mostrando entradas con la etiqueta SubVersion. Mostrar todas las entradas

jueves, 10 de diciembre de 2009

TortoiseSVN

TortoiseSVN es un cliente gratuito de código abierto para el sistema de control de versiones Subversion.

Integrado en la Shell de Windows, por ejemplo el “explorador”. Y ni siquiera está obligado a usar el Explorador de Windows.

Los menús contextuales de TortoiseSVN también funcionan en otros administradores de archivos, y en la ventana Fichero/Abrir que es común a la mayoría de aplicaciones estándar de Windows.

Todos los comandos de Subversion están disponibles desde el menú contextual del explorador.

TortoiseSVN añade su propio submenú allí.

¿Qué necesitamos para empezar?

•Un cliente, como puede ser TortoiseSVN, o el propio que incorpora Subversion.

•La versión más reciente de TortoiseSVN es la 1.2, con capacidad para bloquear.
http://tortoisesvn.tigris.org/download.html

•La versión 1.2 de Subversion: http://subversion.tigris.org/project_packages.html

•Un repositorio, que podemos crear en nuestro servidor SVN, si disponemos de uno; o bien, en local con el propio cliente TortoiseSVN.

Crear el Repositorio con TortoiseSVN

•Seleccionar directorio donde crear el repositorio.

•¿Cómo accedo al cliente TortoiseSVN? A través del “explorador de archivos”, desde el menú contextual que aparece pulsando el botón derecho.

•Opción “Crear repositorio aquí”. Inicialmente vacío.



•¿Cómo cargo datos en el repositorio? Me sitúo en el directorio que quiero cargar, y con la opción “Importar” de TortoiseSVN, índico en qué repositorio lo quiero importar.



•¿Cómo puedo ver lo que hay en el repositorio?

•Usar la opción “Navegador”. El directorio donde he creado el repositorio no se debe tocar.

Subversion y Netbeans

Para empezar a utilizar debemos tener instalado NetBeans en nuestra máquina con Subversion:

1.Abrimos NetBeans y vamos al menú Versioning > Subversion > Checkout.
NetBeans nos alertará de que no tenemos Subversion instalado.


2.Escogemos la primera opción y presionamos OK. Empezará a instalar, primero nos aparece el contrato de licencia, lo aceptamos. A continuación empieza a instalar, en la parte inferior derecha de NetBeans podemos ver la barra de proceso



3.Una vez terminado es proceso Netbeans nos solicitará reiniciar el aplicativo, damos a aceptar.

4.Una vez instalado vemos como ya tenemos más opciones disponibles en el menú Versioning > Subversion

5.Seleccionamos en el menú Versioning > Subversion > Import Into Repository. Nos aparecerá un panel de configuración del repositorio,

6.En este paso necesitaremos usuario y contraseña que se creó con la herramienta VisualSVN Server.




7.Una vez tenemos el panel del NetBeans configurado podemos escoger el directorio donde poner el mensaje de importación (obligatorio) e incluso escoger el lugar donde importar. Le damos a Finish y ya nos hace la importación. Este proceso acostumbra a tardar unos minutos, en la barra inferior derecha encontramos el proceso.


8.Una vez finalizado, se realiza automáticamente un commit de los archivos y los mismos ya estarán disponibles en el repositorio.

Sincronizar archivos modificados
Después de haber modificado nuestros archivos del proyecto, necesitaremos subirlos al repositorio, podemos saber que archivos son los modificados porque el nombre del archivo se queda de color azul cuando esta modificado desde la última sincronización.

Una manera sencilla de hacer una unión de ficheros con lo que hemos modificado nosotros es ir al menú Versioning y pulsar sobre Commit esto subirá los ficheros que nosotros hemos modificado. Si mientras nosotros trabajamos necesitamos mirar si algún miembro del equipo ha tocado algún fichero podemos ir al menú Versioning y pulsar sobre Update, esto nos informará de los cambios.

También podemos usar estos menús en archivos individuales del proyecto, para así ganar velocidad en la sincronización. Para hacerlo debemos ir al menú Subversion del menú contextual que sale al hacer clic con el botón derecho del ratón sobre el fichero.

VisualSVN Server

VisualSVN Server contiene todo lo necesario para instalar, configurar y gestionar un servidor de Subversion; es gratuito, aunque para que funcione es necesario instalar Web Apache (el cual viene incluido en el paquete).

Incluir Apache es una buena solución si se necesita poder acceder a nuestro servidor SVN desde cualquier lugar que tenga una conexión a Internet, de esta forma se puede usar el puerto 80 para las comunicaciones y pasar a través de firewalls sin problemas. Sin embargo, sino necesitas esta funcionalidad, posiblemente sea más sencillo instalar sólo el servidor de SVN usando el puerto estándar (3690).

VisualSVN Server se carga como un servicio más. Su panel de control utiliza el aspecto familiar de las consolas de Windows, con un resumen de los repositorios activos y la dirección del servidor.

Los repositorios se pueden crear o importar desde el mismo panel de VisualSVN Server. En las propiedades de cada elemento hay una pestaña para cambiar los permisos de seguridad.



Ventana principal de VisualSVN Server

Comparando Mercurial con Subversion

Comparando un poco estos dos sistemas, ambos tienen comandos con nombres similares para hacer las mismas operaciones, por lo que si se conoce una, sería bastante sencillo aprender a utilizar otra. Ambas herramientas funcionan en los sistemas operativos populares (Windows, Linux, Mac OS)

Subversion se encuentra en desventaja dado que casi todas las órdenes deben tratar con el servidor y Subversion no tiene utilidades de replicación adecuadas, la capacidad del servidor y el ancho de banda se convierten en cuellos de botella para proyectos modestamente grandes.

Dado que Subversion no almacena el historial de revisiones en el cliente, es muy bueno para administrar proyectos que tienen muchos ficheros binarios grandes.
En general ambas son buenas, todo depende del enfoque del proyecto al que se le quiere aplicar el controlador de la versión.

Subversion

Subversion es una herramienta de control de revisiones muy popular, desarrollada para reemplazar a CVS, con el objetivo de mejorar algunos aspectos que dificultaban el uso de la aplicación. Tiene una arquitectura centralizada tipo cliente/servidor

Subversion es una herramienta de control de revisiones muy popular, desarrollada para reemplazar a CVS, con el objetivo de mejorar algunos aspectos que dificultaban el uso de la aplicación. Tiene una arquitectura centralizada tipo cliente/servidor

Las características fundamentales son:

•Número de versión global al repositorio que se incrementa con cada cambio, por lo que es posible volver a una versión anterior indicando dicho número global.

•Control de cambios en ficheros y directorios (si, almacena y controla cambios en árboles completos de carpetas y ficheros). Mantiene el histórico de versiones de un fichero aunque se mueva o renombre.

•Detecta y trata apropiadamente los ficheros binarios, uno de los puntos débiles de CVS. A estos ficheros les añade una propiedad indicando su tipo.

•La transmisión entre cliente y servidor incluye únicamente los cambios lo que supone un ahorro del ancho de banda. Además, los cambios se calculan a nivel de byte (en lugar de línea ampliamente usado) lo que reduce aún más el tamaño de las modificaciones.

Svn co ruta_repositorio [destino]

Descarga una copia (checkout) de cualquier carpeta contenida en el repositorio (no es necesario bajar la raíz del repositorio, se puede bajar cualquier carpeta contenida en el mismo) que se denominará copia de trabajo. La copia de trabajo son ficheros locales en la máquina por lo que puede ser modificada según se desee.

Las rutas de repositorio tienen la forma protocolo://usuario:password@servidor/ruta. Existen múltiples protocolos como Webdav, svn (protocolo propio), svn+ssh (protocolo svn a través de un túnel ssh para asegurarlo.

Svn update

Se encarga de descargar los últimos cambios del repositorio y mezclarlos en la copia de trabajo para que coincida con la última versión disponible.
Si en el proceso de mezcla se detectan conflictos irresolubles, se marcan en la copia de trabajo para que el usuario los resuelva. De esta forma, se evita corromper el repositorio.

Svn ci [ruta]

Cuando se finalizan los cambios se envían al repositorio (commit). En este momento, se comprueba si la versión base del usuario es la última del repositorio y si es así se envían los cambios creando una nueva revisión.
Si las versiones no coinciden, el usuario deberá actualizar (update) su copia de trabajo con lo que se marcarán los conflictos en la copia de trabajo


Además de este cliente de consola, existen aplicaciones gráficas que realizan ese trabajo de forma transparente y más agradable para el usuario.

Por su parte, es posible atacar al servidor utilizando distintos clientes independientemente de la plataforma en la que ejecute cada uno de ellos. Es posible utilizar un cliente en Windows que se conecte con un servidor en Unix o Mac y viceversa, también se puede integrar Subversion a distintas plataformas de desarrollo que funcionan como clientes como netbeans, eclipse, Dreamweaver.

Si se utiliza Windows, la opción más adecuada es TortoiseSVN. Es un cliente que se integra con el explorador de Windows y que permite realizar todas las acciones mediante entradas en el menú contextual de los ficheros y carpetas. Igualmente las plataformas mencionadas anteriormente igual son clientes gráficos que permiten esta integración.

Para el escritorio KDE existe un plugin similar denominado kdesvn aunque no implementa toda su funcionalidad. Sin embargo, para un uso habitual es suficientemente útil.

Control de Versiones

Durante el desarrollo de cualquier producto, no solamente del código de un programa, éste evoluciona mientras se realizan sucesivos cambios en él. Sin ir más lejos, un libro no se escribe entero en un par de horas sino que se prolonga durante un número de sesiones indeterminadas durante las cuales se añade más y más contenido. Esta adición de contenido realmente son cambios sucesivos al documento. Evidentemente, no todos los cambios consisten en adicciones sino que muchas veces se modifican o eliminan partes ya existentes por diversos motivos.

Generalmente cuando se están desarrollando proyectos ya sean pequeños o grandes se tiene como mínimo la participación de dos desarrolladores, esto hace que se trabaje en diferentes módulos del proyecto que luego de manera manual serán pegadas las partes, sin embargo si el grupo de desarrolladores va creciendo el modo de pegar las partes creadas por cada programador se vuelve bien difícil y complicada, es por eso que a lo largo de los años se han desarrollado diferentes herramientas que permiten llevar un control de las distintas versiones de los proyectos, donde se permite gestionar de una manera más organizada los repositorios de archivos y sus distintas versiones, utilizando una arquitectura cliente-servidor, donde un servidor guarda las versiones actuales del proyecto y su historia, todo esto dependiendo de las cambios y actualizaciones que haga el desarrollador. Independientemente del tipo de cambio realizado, los cambios no son siempre definitivos ni correctos. En muchos casos, un cambio introduce un error que es corregido con cambios posteriores pero, en algunos casos, se desearía poder deshacer completamente un cambio erróneo. En estas circunstancias es cuando interviene los programas de gestión de versiones.

Mediante los procesos definidos de estos sistemas, es posible trazar los cambios que se han realizado en el tiempo. Al disponer de esta información, es posible identificar y controlar todos y cada uno de los cambios realizados. Asimismo, es posible regenerar sin errores el estado del producto en cualquier momento de su desarrollo, es decir, cualquiera de sus versiones, además nos da una serie de ventajas, ya que permite que varios clientes pueden sacar copias del proyecto al mismo tiempo, realizar cambios a los ficheros manteniendo un histórico de los cambios, deshacer los cambios hechos en un momento dado y recuperar versiones pasadas así evitando posibles errores que ocurran en un proceso de actualización, también permiten ver un histórico de cambios y comentarios, lo cual permite que los clientes pueden también comparar diferentes versiones de archivos.

Llevar este control puede parecer complejo en un inicio pero simplifica enormemente el trabajo a corto plazo. Una vez implantado se transforma en una herramienta indispensable de trabajo.

Todos los sistemas de control de versiones se basan en el concepto repositorio. Un repositorio no es más que el conjunto de versiones del producto. Una vez creado, los distintos usuarios realizan sus cambios sobre el repositorio que se encarga de almacenarlos permitiendo la recuperación de cualquier versión.

Existen dos tipos de repositorios:

Centralizado

Cuando se desarrollaron los sistemas de control de versiones, muchos de ellos se hicieron en esquema cliente-servidor, con lo que el desarrollo de las herramientas está claramente diferenciado entre:

•El cliente: Es la aplicación que se conecta al servidor y mantiene una copia local del repositorio, así como se encarga, generalmente de la corrección de conflictos y la mayoría de lógica del sistema.

•El servidor: Es el sistema que toma los datos del cliente y los almacena a espera de una o múltiples peticiones de esos datos. Este sistema se encargaría del almacenamiento de las versiones, control de concurrencia, bloqueos y otras características parecidas a las de las bases de datos.

¿Qué limitaciones y características posee?

•El sistema servidor es un repositorio, como los que mantienen los clientes, pero perfectamente sincronizado y sin que dé lugar a conflictos. Es la copia maestra de los datos.

•Cuando un sistema web quiere hacer un listado, puede tomar los datos de este servidor y siempre serán seguros, con lo que no tendrá que resolver conflictos, ni tendrá que hacer mezclas.

•Una copia local debe de poder mezclarse con el repositorio central cuando queramos publicar un conjunto de cambios o cuando queramos tomar la última versión publicada en concordancia con nuestra copia local.

•Es normal ver en muchos de estos sistemas ramificaciones, versiones, etiquetas, o similares, a modo de tener varias copias según nos interese. Estas ramificaciones están en el servidor y en algunos casos puede llegar a ser muy costosa su diferenciación.

Algunos ejemplos de Controladores de Versiones Centralizados:

•Concurrent Versions System (CVS)

•SubVersion

Distribuido

Desarrolladores como Linus Torvalds, Eric S. Raymond y otros más, han desarrollado sistemas distribuidos de control de versiones tales como GIT, Baazaar, Mercurial, darcs, entre otros; estos sistemas se destacan por haber sido desarrollados en un formato distribuido, esto quiere decir que, en sí, no hay un servidor que mantenga una copia del repositorio, sino que está mantenida entre los clientes que estén en uso del repositorio y, al igual que los clientes P2P, mientras más desarrolladores haya conectados, mejor conectividad habrá entre todos.

En cualquiera de los dos casos, el repositorio es compartido por todos los usuarios (o al mismo usuario desde distintas máquinas) que tengan acceso al mismo. Es posible que se produzcan ediciones simultáneas de los mismos elementos que generen conflictos. Para solucionar este problema existen dos políticas básicas de resolución de conflictos:

Bloqueo-modificación-desbloqueo:

En esta política se evitan las modificaciones concurrentes. Cuando un usuario desea realizar una modificación, indica el elemento a modificar que queda bloqueado en el repositorio por lo que se impide el acceso al resto de usuarios (exclusión mutua). Cuando finaliza de realizar sus cambios, los envía al repositorio liberando el bloqueo con lo que el resto de los usuarios puede obtener la copia actualizada para realizar sus propios cambios.

Copiar-modificar-mezclar:

Esta política permite las modificaciones simultáneas. Cada usuario hace una copia del repositorio en su máquina y procede trabajar con ella como si no fuera un repositorio. Cuando finaliza su trabajo, envía los cambios al repositorio que se encarga de analizar los cambios realizados por el usuario y los que se han realizado en el propio repositorio y realiza la mezcla.

Evidentemente, la primera política es mucho más restrictiva lo que dificulta el trabajo diario ralentizando el acceso a los recursos y ocasionando problemas si no se liberan recursos bloqueados. La segunda, por su parte, tiene como inconveniente que no siempre es posible mezclar los cambios realizados aunque en esos casos, utiliza al usuario que envía cambios para solucionar esos conflictos irresolubles automáticamente.

Esto da una serie de ventajas al sistema centralizado, como son:

•Disponer de forma distribuida de la información del repositorio al completo, tanto de forma local, como a través de los demás componentes del grupo.

•Cada cambio se va replicando entre los demás equipos distribuidos, a modo de que puedan emplear esos datos y actualizarlos en sus sistemas.

•El sistema de control de versiones distribuido ha sido pensado con la forma de trabajo basada en ramas, unión central en una sola versión (trunk) y liberaciones (o tags). Con lo que cada rama puede identificarse como cada copia distribuida que se use.

•Una máquina servidora puede emplearse, al estar siempre conectada, como otro punto de sincronización, con la ventaja de que, aunque cayera, mientras haya más miembros conectados, el sistema siempre se mantiene activo y con buen ancho de banda.

Algunos ejemplos de Controladores de Versiones Distribuidos:

•Baazaar

•Mercurial

•GIT