Ingeniero Telemtico Desarrollador de Software / Consultor Informtico Junio 2013, Santiago de los Caballeros, R. D. Los conceptos y juicios de valor emitidos en esta presentacin son responsabilidad personal y no se puede entender como una posicin oficial de alguna empresa con la que he tenido relacin laboral. Asuntos Legales Todas las marcas registradas, as como todos los logotipos, imgenes, fotografas, audio y vdeos mostrados en esta presentacin son propiedad de sus respectivos propietarios. Su utilizacin es solamente para fines ilustrativos y no pretendo dar a entender cualquier afiliacin con esas empresas. Responsabilidades Contenido Qu es un sistema de control de versiones ? Cmo funciona ? Prcticas Obsoletas. Porqu son necesarios ? Ventajas. Evolucin. Principales sistemas de control de versiones de cdigo abierto. Conclusiones. Qu es un sistema de control de versiones ? Es un software que administra el acceso a un conjunto de archivos, y mantiene un historial de cambios realizados. El control de versiones es til para guardar cualquier documento que cambie con frecuencia, como una novela, o el cdigo fuente de un programa. Cmo funciona ? Normalmente consiste en una copia maestra en un repositorio central, y un programa cliente con el que cada usuario sincroniza su copia local. Esto permite compartir los cambios sobre un mismo conjunto de archivos. Adems, el repositorio guarda registro de los cambios realizados por cada usuario, y permite volver a un estado anterior en caso de necesidad. Flujo de trabajo centralizado Prcticas Obsoletas Si alguna vez ha colaborado con otras personas en un proyecto, usted sabe la frustracin de constante intercambio de archivos. Los programadores a travs del tiempo han usado diversos mtodos para compartir su cdigo fuente en un ambiente de desarrollo colaborativo, a continuacin algunas de las soluciones ms usadas: Realizar copias en diferentes computadoras Mantener un backup en computadoras o servidores diferentes, as como tambin, guardar copia en disco compactos o disco externos. Si bien es cierto que sta prctica puede mantener a salvo los cdigos fuentes, tambin es cierto que tiene desventajas a la hora de guardar versiones. En cada modificacin que hace al cdigo original debe ir guardando tus propias copias de la versin anterior a la modificacin y de la nueva versin. Crear aplicaciones propias Crear aplicaciones in-house para manejar las versiones de tu cdigo, quizs sea una buena opcin pero est reinventando la rueda, ya que existen opciones open source para manejar versiones. El tiempo que debes utilizar para desarrollar una nueva aplicacin para estos fines puede utilizarlo en el desarrollo de otro proyecto. Guardar los fuentes en Dropbox Una solucin usadas en los ltimos tiempos por los programadores. Dropbox internamente funciona como un manejador de versiones pero tiene sus limitantes en el uso que puede darle un desarrollador. Las soluciones anteriores pueden tener su utilidad y dar resultados aceptables, sin embargo, es recomendable usar una solucin general, diseada para mantener tu cdigo a salvo y de forma centralizada, como lo hacen los sistemas de control de versiones. Por qu son necesarios? En la seccin anterior presentamos algunas prcticas usadas por los programadores y sus desventajas. Todos los sistemas de control de versiones tienen ciertas caractersticas que eliminan muchas de las desventajas presentadas anteriormente, entre las cuales podemos mencionar: Actualiza archivos modificados El cliente recorre nuestro cdigo y sincroniza nuestra copia local con el repositorio. Copias de seguridad centralizadas Solo el administrador debe preocuparse de realizar copias de seguridad en el repositorio. Esto se automatiza fcilmente con una tarea cron [http://www.gnu. org/directory/cron.html] o similares. Historial de cambios El repositorio guarda registro de todos los cambios realizados. Es posible recuperar cualquiera de las versiones anteriores de cualquier archivo. Si alguien borra todos los archivos, podemos volver atrs y recuperar su contenido. Acceso remoto Es posible acceder remotamente al repositorio. No es necesario que el equipo est dentro de la misma LAN. Seguridad Es posible otorgar diferentes permisos sobre diferentes ramas del proyecto. Por ejemplo, estableciendo permiso universal de lectura, y permiso de escritura slo a ciertos usuarios. Qu hacer cuando dos usuarios intentan modificar el mismo archivo? Existen dos opciones ... 1. Bloqueos (Locks) El usuario bloquea el archivo durante su edicin, evitando el acceso concurrente de otros usuarios. Existen varios problemas: el usuario que acapara archivo, el interbloqueo entre usuarios que necesitan varios archivos, y la falta de concurrencia. 2. Merge (fusin de cambios) los archivos se acceden concurrentemente. Los cambios realizados sobre un mismo archivo son fusionados inteligentemente por el sistema. El nico problema es el intento de fusin de cambios incompatibles, que ha de solucionarse manualmente. Ventajas La mayora de los desarrolladores probablemente han trabajado con algn tipo de sistema de control de versiones, pero las personas en otras reas pueden tener un concepto extrao. La ventaja ms obvia de usar control de versiones es la posibilidad de tener un nmero ilimitado de personas que trabajan en la misma base de cdigo, sin tener que enviar constantemente los archivos de ida y vuelta. Desarrolladores y otros profesionales que manejan archivos a los cuales se le realizan cambios constantemente, pueden beneficiarse del uso de los sistemas de control de versiones para guardar copias de sus archivos, diseos, libros, etc. Usted puede navegar por los cambios anteriores realizado a su repositorio y volver a versiones anteriores si pasa algo. Evolucin Principales sistemas de control de versiones de cdigo abierto CVS Concurrent Versions System Desarrollador: The CVS Team Url: savannah.nongnu.org/projects/cvs Lanzamiento inicial : 19 de Noviembre de 1990 Programado en C. Sistema operativo: Unix-like, Windows Licencia: GNU General Public License (GPL) Esquema de trabajo CVS Es el abuelo de los sistemas de control de versiones. Fue lanzado por primera vez en 1986. CVS tuvo el mrito de ser el primer sistema usado por el movimiento de cdigo abierto para que los programadores colaborarn remotamente mediante el envo de parches. Es de uso gratuito, cdigo abierto, y emplea fusin de cambios. Aunque CVS puede ser una tecnologa antigua, todava es muy til para realizar copias de seguridad y compartir archivos. SVN Desarrollador: Comunidad, y desarrolladores de CollabNet, Elego, VisualSVN, WANdisco Url: http://subversion.apache.org Lanzamiento inicial : 20 de octubre de 2000 Programado en C. Sistema operativo: Multiplataforma Licencia: Licencia Apache Flujo de trabajo centralizado Subversion se cre para igualar y mejorar la funcionalidad de CVS, preservando su filosofa de desarrollo. Su desarrollo comenz en el ao 2000 como proyecto de cdigo abierto apadrinado por CollabNet. El lder del equipo de desarrollo fue Karl Fogel, autor de Open Source Development with CVS y fundador de Cyclic Software (compaa de desarrollo y soporte comercial para CVS. Probablemente sea el sistema de control de versiones con la adopcin ms amplia. La mayora de los proyectos de cdigo abierto utiliza Subversion como repositorio. Google Code utiliza Subversion exclusivamente para distribuir cdigo. Otros proyectos de mayor envergadura, como SourceForge, Apache, y muchos otros tambin lo utilizan. GIT Desarrollador: Junio Hamano, Linus Torvalds Url: http://git-scm.com Diseador: Linus Torvalds Programado en C, Bourne Shell, Perl1 Licencia : GNU GPL v2 Flujos de trabajo distribuidos Es la nueva estrella de los sistemas de control de versiones. Inicialmente diseado y desarrollado por Linus Torvalds para el desarrollo del Kernel de Linux, desde ese entonces, ha sido adoptado por otros proyectos. Git se enorgullece de ser un sistema rpido y eficaz, muchos proyectos de cdigo abierto importantes utilizan Git para alimentar sus repositorios, proyectos como: Linux Kernel, WINE, Fedora y muchos ms. Git ofrece un tipo de control de versiones diferente, un sistema de control distribuido de versiones. Con un sistema de control de versiones distribuido, no hay una sola base de cdigo centralizada para tirar el cdigo. Diferentes ramas sostienen las diferentes partes del cdigo. Otros sistemas de control de versiones, como SVN y CVS, utilizar el control de versiones centralizado, lo que significa que slo se utiliza una copia original del software. GitHub ha ayudado recientemente a establecer Git como un gran sistema de control de versiones, ofreciendo una hermosa interfaz para muchos proyectos grandes, como Ruby on Rails, Netty y otros ms. Sin embargo, Git no es tan fcil de aprender como CVS o SVN, as que es mucho ms difcil de usar para un principiante. Ms informacin en: https://github.com Mercurial Desarrollador: Matt Mackall Url: http://mercurial.selenic.com Programado en Python y C Sistema operativo: Tipo Unix, Windows, Mac OS X Licencia : GPL v2 Esquema de trabajo Es otro sistema de control de versiones distribuidos de cdigo abierto, como Git. Mercurial fue diseado para proyectos ms grandes, probablemente fuera del alcance de los diseadores y desarrolladores web independientes. Eso no quiere decir que los equipos de desarrollo pequeos no pueden o no deben utilizarlo. Mercurial es muy rpido, y fue diseado con el rendimiento como la caracterstica ms importante. Aparte de ser muy rpido y escalable, Mercurial es un sistema mucho ms simple que Git, por lo que atrae a algunos desarrolladores. No hay tantas funciones para aprender, y las funciones son similares a los de otros sistemas de CVS. Tambin viene equipado con una interfaz Web independiente y amplia documentacin en la comprensin de Mercurial si usted ha estado utilizando otro sistema. Bazaar Desarrollador: Canonical Ltd. y comunidad Url: bazaar.canonical.com Diseador: Martin Pool Lanzamiento inicial: 14 de diciembre de 2007 Programado en Python, Pyrex, C Sistema operativo: Multiplataforma Licencia: GPLv2 o superior1 (software libre) Flujo de trabajo Es otro sistema distribuido de control de versiones, como Mercurial y Git, que ofrece una experiencia de usuario muy amigable. Se llama a s mismo "El control de versiones para los seres humanos." Es compatible con muchos tipos diferentes de flujos de trabajo, con muchas variaciones entre ellos. Se trata de un gran sistema de control de versiones para casi cualquier proyecto, ya que es fcil de modificar. Tambin es integrable, por lo que puede agregar a los proyectos existentes. Bazaar tambin tiene una comunidad fuerte que mantiene cosas como plug-ins y un montn de herramientas de terceros. Bazaar es usado por miles de proyectos, incluyendo a : GNU BugZilla Debian LaunchPad Linux Foundation MariaDB Inkscape Popularidad ZeroTurnaround Developer Productivity Report 2012 Recursos CVS: http://cvs.nongnu.org/ http://en.wikipedia.org/wiki/Concurrent_Versions_System SVN: http://subversion.tigris.org/ http://code.google.com/ http://www.beanstalkapp.com/ http://en.wikipedia.org/wiki/Apache_Subversion Git http://en.wikipedia.org/wiki/Git_(software) https://git.wiki.kernel.org/index.php/GitSvnComparsion Mercurial http://www.selenic.com/mercurial/wiki/index.cgi/Tutorial http://www.selenic.com/mercurial/wiki/index.cgi/UnderstandingMercurial http://en.wikipedia.org/wiki/Mercurial Bazaar: http://bazaar-vcs.org/ http://bazaar-vcs.org/Workflows http://doc.bazaar-vcs.org/latest/en/tutorials/using_bazaar_with_launchpad.html Conclusiones Desarrollar un software implica invertir mucho tiempo y dinero. No proteger el cdigo fuente con un sistema de control de versiones es irresponsable y puede traer graves consecuencias. Cualquier persona que trabaje con archivos que son sometidos a cambios constantemente pueden beneficiarse del uso de los sistemas de control de versiones para guardar copias de sus archivos, diseos, libros, etc. Existen sistemas de control de versiones de cdigo abierto, libre distribucin y amplia documentacin, lo que permite su fcil implementacin y curva de aprendizaje. Referencias Distributed Source Control Management systems http://blog.tfnico.com/2010/06/distributed-source-control-management.html 7 Version Control Systems Reviewed http://www.smashingmagazine.com/2008/09/18/the-top-7-open-source-version- control-systems/ Libro Version Control with Subversion (Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato). Ensayo "Subversion" de Alejandro Ramrez Email: eudris@gmail.com Skype: eudriscabrera LinkedIn: http://www.linkedin.com/in/eudriscabrera GitHub: https://github.com/ecabrerar