[ES] Sistemas de control de versiones

44
Sistemas de Control de Versiones Eudris B. Cabrera Rodríguez Ingeniero Telemático Desarrollador de Software / Consultor Informático Junio 2013, Santiago de los Caballeros, R. D.

Transcript of [ES] Sistemas de control de versiones

Page 1: [ES] Sistemas de control de versiones

Sistemas de Control de VersionesEudris B. Cabrera RodríguezIngeniero TelemáticoDesarrollador de Software / Consultor Informático

Junio 2013, Santiago de los Caballeros, R. D.

Page 2: [ES] Sistemas de control de versiones

Los conceptos y juicios de valor emitidos en esta presentación son responsabilidad personal y no se puede entender como una posición oficial de alguna empresa con la que he tenido relación laboral.

Asuntos LegalesTodas las marcas registradas, así como todos los logotipos, imágenes, fotografías, audio y vídeos mostrados en esta presentación son propiedad de sus respectivos propietarios.

Su utilización es solamente para fines ilustrativos y no pretendo dar a entender cualquier afiliación con esas empresas.

Responsabilidades

Page 3: [ES] Sistemas de control de versiones

Contenido

■ ¿Qué es un sistema de control de versiones ?

■ ¿Cómo funciona ?

■ Prácticas Obsoletas.

■ ¿Porqué son necesarios ?

■ Ventajas.

■ Evolución.

■ Principales sistemas de control de versiones de código abierto.

■ Conclusiones.

Page 4: [ES] Sistemas de control de versiones

¿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 cualquierdocumento que cambie con frecuencia, como una novela, o el código fuente de un programa.

Page 5: [ES] Sistemas de control de versiones

¿Cómo 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.

Además, el repositorio guarda registro de los cambios realizados por cada usuario, y permite volver a un estado anterior en caso de necesidad.

Page 6: [ES] Sistemas de control de versiones

Flujo de trabajo centralizado

Page 7: [ES] Sistemas de control de versiones

Prácticas Obsoletas

Si alguna vez ha colaborado con otras personas en un proyecto, usted sabe la frustración de constante intercambio de archivos.

Los programadores a través del tiempo han usado diversos métodos para compartir su código fuente en un ambiente de desarrollo colaborativo, a continuación algunas de las soluciones más usadas:

Page 8: [ES] Sistemas de control de versiones

Realizar copias en diferentes computadoras

Mantener un backup en computadoras o servidores diferentes, así como también, guardar copia en disco compactos o disco externos.

Si bien es cierto que ésta práctica puede mantener a salvo los códigos fuentes, también es cierto que tiene desventajas a la hora de guardar versiones.

En cada modificación que hace al código original debe ir guardando tus propias copias de la versión anterior a la modificación y de la nueva versión.

Page 9: [ES] Sistemas de control de versiones

Crear aplicaciones propias

Crear aplicaciones in-house para manejar las versiones de tu código, quizás sea una buena opción pero está reinventando la rueda, ya que existen opciones open source para manejar versiones.

El tiempo que debes utilizar para desarrollar una nueva aplicación para estos fines puede utilizarlo en el desarrollo de otro proyecto.

Page 10: [ES] Sistemas de control de versiones

Guardar los fuentes en Dropbox

Una solución 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 solución general, diseñada para mantener tu código a salvo y de forma centralizada, como lo hacen los sistemas de control de versiones.

Page 11: [ES] Sistemas de control de versiones

¿Por qué son necesarios?

En la sección anterior presentamos algunas prácticas usadas por los programadores y sus desventajas.

Todos los sistemas de control de versiones tienen ciertas características que eliminan muchas de las desventajas presentadas anteriormente, entre las cuales podemos mencionar:

Page 12: [ES] Sistemas de control de versiones

Actualiza archivos modificadosEl cliente recorre nuestro código y sincroniza nuestra copia local con el repositorio.

Copias de seguridad centralizadasSolo el administrador debe preocuparse de realizar copias de seguridad en el repositorio.

Esto se automatiza fácilmente con una tarea cron [http://www.gnu.org/directory/cron.html] o similares.

Page 13: [ES] Sistemas de control de versiones

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 atrás y recuperar su contenido.

Page 14: [ES] Sistemas de control de versiones

Acceso remoto

Es posible acceder remotamente al repositorio. No es necesario que el equipo esté dentro de la misma LAN.

SeguridadEs posible otorgar diferentes permisos sobre diferentes ramas del proyecto.

Por ejemplo, estableciendo permiso universal de lectura, y permiso de escritura sólo a ciertos usuarios.

Page 15: [ES] Sistemas de control de versiones

¿Qué hacer cuando dos usuarios intentan modificar el mismo

archivo?

Page 16: [ES] Sistemas de control de versiones

Existen dos opciones ...

Page 17: [ES] Sistemas de control de versiones

1. Bloqueos (Locks)

El usuario bloquea el archivo durante su edición, 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.

Page 18: [ES] Sistemas de control de versiones

2. Merge (fusión 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 fusión de cambios incompatibles, que ha de solucionarse manualmente.

Page 19: [ES] Sistemas de control de versiones

Ventajas

La mayoría de los desarrolladores probablemente han trabajado con algún tipo de sistema de control de versiones, pero las personas en otras áreas pueden tener un concepto extraño.

La ventaja más obvia de usar control de versiones es la posibilidad de tener un número ilimitado de personas que trabajan en la misma base de código, sin tener que enviar constantemente los archivos de ida y vuelta.

Page 20: [ES] Sistemas de control de versiones

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, diseños, libros, etc.

Usted puede navegar por los cambios anteriores realizado a su repositorio y volver a versiones anteriores si pasa algo.

Page 21: [ES] Sistemas de control de versiones

Evolución

Page 22: [ES] Sistemas de control de versiones

Principales sistemas de control de versiones de código abierto

Page 23: [ES] Sistemas de control de versiones

CVSConcurrent Versions System

Desarrollador: The CVS TeamUrl: savannah.nongnu.org/projects/cvsLanzamiento inicial :19 de Noviembre de 1990 Programado en C.Sistema operativo: Unix-like, WindowsLicencia: GNU General Public License (GPL)

Esquema de trabajo

Page 24: [ES] Sistemas de control de versiones

CVS

Es el abuelo de los sistemas de control de versiones. Fue lanzado por primera vez en 1986.

CVS tuvo el mérito de ser el primer sistema usado por el movimiento de código abierto para que los programadores colaborarán remotamente mediante el envío de parches.

Es de uso gratuito, código abierto, y emplea fusión de cambios.

Aunque CVS puede ser una tecnología antigua, todavía es muy útil para realizar copias de seguridad y compartir archivos.

Page 25: [ES] Sistemas de control de versiones

SVN

Desarrollador: Comunidad, y desarrolladores de CollabNet, Elego, VisualSVN, WANdiscoUrl: http://subversion.apache.orgLanzamiento inicial : 20 de octubre de 2000Programado en C.Sistema operativo: Multiplataforma

Licencia: Licencia Apache

Flujo de trabajo centralizado

Page 26: [ES] Sistemas de control de versiones

Subversion se creó para igualar y mejorar la funcionalidad de CVS, preservando su filosofía de desarrollo.

Su desarrollo comenzó en el año 2000 como proyecto de código abierto apadrinado por CollabNet.

El líder del equipo de desarrollo fue Karl Fogel, autor de Open Source Development with CVS y fundador de Cyclic Software (compañía de desarrollo y soporte comercial para CVS.

Page 27: [ES] Sistemas de control de versiones

Probablemente sea el sistema de control de versiones con la adopción más amplia.

La mayoría de los proyectos de código abierto utiliza Subversion como repositorio.

Google Code utiliza Subversion exclusivamente para distribuir código.

Otros proyectos de mayor envergadura, como SourceForge, Apache, y muchos otros también lo utilizan.

Page 28: [ES] Sistemas de control de versiones

GIT

Desarrollador:Junio Hamano, Linus TorvaldsUrl: http://git-scm.comDiseñador: Linus TorvaldsProgramado en C, Bourne Shell, Perl1Licencia : GNU GPL v2

Flujos de trabajo distribuidos

Page 29: [ES] Sistemas de control de versiones

Es la nueva estrella de los sistemas de control de versiones.

Inicialmente diseñado 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 rápido y eficaz, muchos proyectos de código abierto importantes utilizan Git para alimentar sus repositorios, proyectos como: Linux Kernel, WINE, Fedora y muchos más.

Page 30: [ES] Sistemas de control de versiones

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 código centralizada para tirar el código.

Diferentes ramas sostienen las diferentes partes del código.

Otros sistemas de control de versiones, como SVN y CVS, utilizar el control de versiones centralizado, lo que significa que sólo se utiliza una copia original del software.

Page 31: [ES] Sistemas de control de versiones

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 más.

Sin embargo, Git no es tan fácil de aprender como CVS o SVN, así que es mucho más difícil de usar para un principiante.

Más información en:https://github.com

Page 32: [ES] Sistemas de control de versiones

Mercurial

Desarrollador:Matt MackallUrl: http://mercurial.selenic.comProgramado en Python y CSistema operativo: Tipo Unix, Windows, Mac OS XLicencia : GPL v2

Esquema de trabajo

Page 33: [ES] Sistemas de control de versiones

Es otro sistema de control de versiones distribuidos de código abierto, como Git.

Mercurial fue diseñado para proyectos más grandes, probablemente fuera del alcance de los diseñadores y desarrolladores web independientes.

Eso no quiere decir que los equipos de desarrollo pequeños no pueden o no deben utilizarlo.

Mercurial es muy rápido, y fue diseñado con el rendimiento como la característica más importante.

Page 34: [ES] Sistemas de control de versiones

Aparte de ser muy rápido y escalable, Mercurial es un sistema mucho más 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.

También viene equipado con una interfaz Web independiente y amplia documentación en la comprensión de Mercurial si usted ha estado utilizando otro sistema.

Page 35: [ES] Sistemas de control de versiones

Bazaar

Desarrollador:Canonical Ltd. y comunidadUrl: bazaar.canonical.comDiseñador: Martin PoolLanzamiento inicial: 14 de diciembre de 2007Programado en Python, Pyrex, CSistema operativo: MultiplataformaLicencia: GPLv2 o superior1 (software libre)

Flujo de trabajo

Page 36: [ES] Sistemas de control de versiones

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 fácil de modificar.

Page 37: [ES] Sistemas de control de versiones

También es integrable, por lo que puede agregar a los proyectos existentes.

Bazaar también tiene una comunidad fuerte que mantiene cosas como plug-ins y un montón de herramientas de terceros.

Page 38: [ES] Sistemas de control de versiones

Bazaar es usado por miles de proyectos, incluyendo a :

GNU

BugZilla Debian LaunchPad

Linux Foundation MariaDB Inkscape

Page 39: [ES] Sistemas de control de versiones

Popularidad

ZeroTurnaround Developer Productivity Report 2012

Page 40: [ES] Sistemas de control de versiones

RecursosCVS:

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

Page 41: [ES] Sistemas de control de versiones

Githttp://en.wikipedia.org/wiki/Git_(software)

https://git.wiki.kernel.org/index.php/GitSvnComparsion

Mercurialhttp://www.selenic.com/mercurial/wiki/index.cgi/Tutorial

http://www.selenic.com/mercurial/wiki/index.cgi/UnderstandingMercurialhttp://en.wikipedia.org/wiki/Mercurial

Bazaar:http://bazaar-vcs.org/

http://bazaar-vcs.org/Workflowshttp://doc.bazaar-vcs.org/latest/en/tutorials/using_bazaar_with_launchpad.html

Page 42: [ES] Sistemas de control de versiones

Conclusiones

■ Desarrollar un software implica invertir mucho tiempo y dinero. No proteger el código 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, diseños, libros, etc.

■ Existen sistemas de control de versiones de código abierto, libre distribución y amplia documentación, lo que permite su fácil implementación y curva de aprendizaje.

Page 43: [ES] Sistemas de control de versiones

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 Ramírez

Page 44: [ES] Sistemas de control de versiones

Email: [email protected]

Skype:eudriscabrera

LinkedIn:http://www.linkedin.com/in/eudriscabrera

GitHub:https://github.com/ecabrerar