miércoles, 5 de junio de 2013

Subversion bajo Netbeans.

Sistemas de Control de versiones(SCV) (Manuel y Víctor)

Contextualización


En esta entrada del Blog vamos a hablaros sobre un tema que esta muy de moda en el mundo de desarrollo de software, “El famoso control de versiones”. A grandes rasgos podríamos definir  el control de versiones como una utilidad para gestionar los continuos cambios y versiones que se dan en el desarrollo de un producto, generalmente relacionados con el desarrollo de software.


En el mundo del desarrollo podemos encontrarnos con situaciones peligrosas o delicadas como es la modificación concurrente, imaginemos que dentro de un equipo de desarrollo hay un momento en que varios compañeros han de modificar el mismo fichero simultáneamente, ¿que pasaría?, posiblemente se perderían las modificaciones de todos los compañeros menos el del ultimo usuario en guardar. Otra problema diferente que se nos plantea es el de poder volver a una versión anterior, sin tener una infinidad de código duplicado.


Con el fin de solucionar los problemas anteriormente citados, surgieron los famosos sistemas de control de versiones


Que es un sistema de control de versiones.


De lo comentado anteriormente se deduce gran parte del fin de estos sistemas. Es un sistema que se encarga del restablecimiento de determinadas versiones anteriores y  del control de las modificaciones concurrente de ficheros.


¿Cómo funciona?.


Generalmente se trata de un sistema Cliente-Servidor, en el cual el servidor, comúnmente conocido como repositorio, almacena las distintas modificaciones que los clientes registran en el proyecto y controla que unas versiones no solapen cambios hechos por una versión intermedia entre el momento de obtención y el momento de guardado en el servidor, forzando al usuario a tomar una decision en el caso de que  los cambios realizados por este se solapen o entren en conflicto con otro usuario o desarrollador.


Podemos resumir esquemáticamente los pasos a seguir a la hora de trabajar con un SCV:


1º Crear una copia local del proyecto (sólo la primera vez que se obtena el proyecto).
2º Editar los archivos de código
3º Revisar los cambios realizados contra el servidor o repositorio antes de guardar
4º Actualizar los cambios realizados en el repositorio





¿Cuales son los sistemas existentes?


-Subversion(SVN):
Subversion es evolución natural de CVS, mejorando algunas de las carencias de este último.
-Concurrent Versions System(CVS):
-Mercurial:
-Git:
-Team Foundation Server: Es un control de versiones para la plataforma .net




Ahora realizaremos un ejemplo de uso de un control de versiones para que podais conocer las funcionalidades y ver la utilidad, para ello vamos a usar Subversion


Términos subversion:
Antes de empezar a realizar la práctica es conveniente aclarar algunos términos


Copia de trabajo:
Es la copia local de los archivos de un repositorio, en un momento
del tiempo o revisión específicos.


Check-out (co):
Es crea una copia de trabajo local desde el repositorio. Se puede
especificar una revisión específica.


Commit (ci):
Cuando una copia de los cambios hechos a una copia local es
integrada sobre repositorio


Import:
Una importación es la acción de copiar un árbol de directorios
local (que no es en ese momento una copia de trabajo) en el
repositorio por primera vez.


Actualizar (update):
Una actualización integra los cambios que han sido hechos en el
repositorio (por ejemplo por otras personas) en la copia de
trabajo local.



Conflicto:
Ocurre cuando se realizan dos cambios al mismo documento, y el
sistema es incapaz de reconciliar los mismos.


Resolver:
La intervención del usuario para atender un conflicto entre
diferentes cambios al mismo documento.



Instalación, puesta en marcha y pruebas de un control de versiones bajo subversion.


Para poder llevar a cabo nuestra practica nos vamos a basar en el cliente de subversion para Netbeans. Igualmente decir que nuestro proyecto se aloja en google code el cual es gratuito, y que la versión de Netbeans utilizada es la 7.0.1, pudiendo variar algunos menús de acceso y configuración, entre distintas versiones.



Aqui mostramos el enlace para descargar Netbeans.


A continuación se muestran los pasos necesarios, para configurar el cliente de subversion, así como algunas de las acciones más comunes.


En primer lugar accedemos en la barra de herramientas a Team/Subversion/Checkout, como se aprecia en la imagen.
      
Posteriormente nos mostrará la ventana en la que tendremos que configurar el cliente para poder acceder al repositorio.
 En nuestro caso y como se comentó anteriormente, nuestro repositorio se encuentra en google code, por lo tanto: 
1. Hace referencia a la ruta del repositorio.
2.  Tendremos que poner nuestro usuario con el cual accedemos al repositorio.
3. Contraseña para acceder al repositorio, o en este caso, contraseña facilitada por google code para acceder a este repositorio en concreto.

Ya tenemos nuestro cliente de subversion configurado, ahora lo que vamos a hacer es importar el proyecto desde el repositorio que acabamos de configurar.
Teniendo un proyecto creado, nos situamos sobre el nombre del proyecto, pulsamos botón derecho/ Versioning/Import into subversion repository, tal y como muestra la imagen.

 De nuevo nos mostrará la configuración del repositorio (ya configurado) y al pulsar siguiente nos mostrará la ventana para seleccionar la ruta donde se guardará localmente el proyecto. Tras aceptar esto, tendremos el proyecto sincronizado con el repositorio de google code, de forma que todos los cambios que se realicen localmente a nuestro código, se puedan actualizar para que cualquier otra persona con acceso a este repositorio pueda descargarlo.

Una vez que ya tenemos nuestro proyecto sincronizado, es hora de ver algunas de las principales funciones de subversion, como ya se comentó anteriormente se pueden realizar updates (descargar última versión), commit ( subir copia local), o ver cambios sobre un determinado archivo.
 En primer lugar vamos a ver como podríamos obtener la última versión del repositorio. Para ello, podemos acceder tal y como muestra la imagen. Al realizar esta acción, el proyecto quedaría actualizado a la última versión.


 Ya sabemos obtener la última versión del repositorio, pero supongamos que hemos realizado cambios en algunos archivos, hemos agregado otros tantos, y hemos borrado otros innecesarios para el proyecto, de forma que queremos actualizar el repositorio y subir nuestros cambios. Como siempre nos vamos al menu de subversion dentro del proyecto y pulsamos commit.



A continuación, se nos mostrará un pantalla en la cual podremos seleccionar que ficheros tienen cambios y cuales de estos queremos subir, ya que puede ser que algún fichero tenga algún cambio pero no nos interese actualizar el repositorio con ese cambio en ese fichero en concreto, pero si actualizar el resto de ficheros. Como se observa en la foto, tenemos un area para introducir texto, de forma que al ver las versiones en el repositorio, tendremos una breve descripción de cuales fueron los cambios realizados. Justo debajo tenemos los archivos modificados, nuevos o borrados, de los cuales hay que seleccionar los que queramos actualizar.

     
     Otra de las opciones de subversion es poder ver los cambios que se han realizado ultimamente, o un historial de los cambios realizados tanto por un archivo en concreto, como en el proyecto en general.


 Por último vamos a ver otra funcionalidad de subversion, mediante la cual podemos ver los cambios realizados sobre un fichero en concreto, de forma que nos mostrará las líneas añadidas o eliminadas de un fichero, para así llevar un control sobre que cambios, y quien los ha realizado. En la imagen inferior podemos ver lo que se ha producido despues de hacer un update(descargar ficheros del repositorio, para actualizar nuestra copia local con la última versión). Como se puede observar el fichero de la izquierda es el fichero del repositorio, y el de la derecha es el que tengo en mi copia local, de forma que el programa nos avisa de que en la copia local hemos eliminado código que en el repositorio si aparece. Para solucionar esto el propio subversion nos ofrece una opción mediante la cual podemos mezclar los cambios, o simplemente indicarle cual de las dos versiones es la que nos interesa quedarnos.


Para finalizar, simplemente decir que subversion ofrece infinidad de opciones avanzadas, para facilitar el mantenimiento del código entre múltiples personas de un equipo de trabajo, de forma que sea más fácil controlar que se modifica, quien lo modifica y en que momento. Igualmente podemos obtener versiones antiguas, si por alguna equivocación hemos ido modificando código y al tiempo nos hemos dado cuenta que hace un mes estaba mejor.



     

1 comentario:

  1. Muy buenas, excelente, sin embargo para no dejar el codigo en el servidor de subversion especificado, ¿deberé instalar mi propio subversion servidor y así apuntar la url del repositorio donde se instala el svn?.

    Haré la prueba y te comento, supongo que debe ser así, sino me lo mencionas.

    Excelente post SVN!.
    Un abrazo y continúa así.

    ResponderEliminar