Sistemas para el Control de Versiones de Código

download Sistemas para el Control de Versiones de Código

If you can't read please download the document

description

Una introducción al uso de Sistemas de Control de Versiones (SCV) como parte de las "Buenas Prácticas de Programación". Se discuten los conceptos básicos, flujos de trabajo usuales, y al final, se muestran ejemplos de uso de Bazaar como SCV.

Transcript of Sistemas para el Control de Versiones de Código

  • 1. Buenas Prcticas de Programacin Sistemas para el Control de Versiones de Cdigo Jess M. Castagnetto M., Ph.D. [email protected] - [email protected] http://www.castagnetto.com/

2. Agenda

  • Qu es un Sistema de Control de Versiones? (SCV)
  • Conceptos principales en SCVs
  • Sistemas SCV ms usados
  • Bazaar, un SCV flexible y simple
  • Donde conseguir mas informacin

3. S istema deC ontrol deV ersiones

  • Permite el manejo de mltiples revisiones
  • Acta a niveles de archivo de cdigo, directorio, proyecto, etc.
  • Se encarga de identificar, comparar, revertir, etc., cambios en la informacin
  • Ayuda en el desarrollo paralelo de un proyecto, por mltiples programadores.

4. Qu puede controlar un SCV?

  • Archivos Los ms simples, controlan solamente archivos individuales.
  • rboles de archivos Los ms avanzados, pueden manejar directorios (y sub-directorios) con sus archivos asociados, incluyendo el concepto de proyecto.

5. Cmo puede trabajar un SCV?

  • Local Informacin acerca de cambios se mantiene en un repositorio local.
  • CentralizadoNecesitan el uso de un servidor y repositorio central.
  • Descentralizado Permiten el uso de mltiples repositorios, y sincronizacin entre ellos.

6. Evolucin de los SCV 7. Desarrollo de los SCV (1)

  • Primera Generacin
  • Control de archivos individuales.
  • Almacenamiento de local (en el mismo directorio) de revisiones.
  • Ejemplos: SCCS, RCS.

SCCS: http://en.wikipedia.org/wiki/Source_Code_Control_System RCS: http://en.wikipedia.org/wiki/Revision_Control_System 8. Desarrollo de los SCV (2)

  • Segunda Generacin
  • Control de rboles de archivos.
  • Almacenamiento centralizado de revisiones.
  • Manejo deficiente de algunas operaciones (ej. renombrado de archivos).
  • Ejemplo: CVS.

CVS: http://en.wikipedia.org/wiki/Concurrent_Versions_System 9. Desarrollo de los SCV (3)

  • Tercera Generacin
  • Control de rboles de archivos.
  • Almacenamiento centralizado de revisiones.
  • Manejo completo de operaciones complejas con archivos.
  • Ejemplo: Subversion.

SVN: http://en.wikipedia.org/wiki/Subversion_(software) 10. Desarrollo de los SCV (4)

  • Cuarta Generacin
  • Control de rboles de archivos.
  • Almacenamiento descentralizado de revisiones.
  • Manejo deficiente de algunos flujos de trabajo y consolidacin compleja.
  • Ejemplo: GNU arch.

GNU arch: http://en.wikipedia.org/wiki/GNU_arch 11. Desarrollo de los SCV (5)

  • Quinta Generacin
  • Control de rboles de archivos.
  • Almacenamiento descentralizado de revisiones.
  • Manejo de mltiples flujos de trabajo, inlcuyendo el centralizado.
  • Ejemplo: Bazaar.

Bazaar: http://bazaar-vcs.org/ 12. Conceptos bsicos de SCV 13. Revisin

  • Es una visin esttica en el tiempo, del estado de un grupo de archivos y directorios.
  • Tiene asociada metadata (fecha, identidad de quin hizo modificaciones, etc.)
  • Posee una etiqueta (nmero de revisin, etc.) que la identifica nicamente.

14. Copia de trabajo

  • Tambin llamado rbol de trabajo.
  • Es el conjunto de directorios y archivos manejados por el SCV, y que estn bajo edicin activa.
  • Est asociado a una rama de trabajo en particular.

15. Rama de trabajo (o desarollo)

  • En el caso mas simple, unaramaes un conjunto ordenado de revisiones.
  • La revisin ms reciente se denomina la cabeza (head) o principal (main).
  • Las ramas se pueden separar y juntar como se necesite, formando un grafo de revisin (que es un Grafo Acclico Directo, DAG).

16. Repositorio

  • Un sitio de almacenamiento de revisiones.
  • Puede estar estructurado internamente como un solo archivo, una coleccin de archivos, base de datos, etc.
  • Puede residir localmente (en el mismo sistema de archivos), o ser remoto (servidor o servidores).

17. Conflicto y Resolucin

  • Ocurre cuando dos personas han hecho cambios contradictorios en un mismo documento (o grupo de documentos).
  • Los SCVs slo alertan acerca de un conflicto, los humanos tienen que solucionarlo.
  • El proceso de resolver un conflicto es denominadoresolucin .

18. Cambio y Combinacin

  • Uncambio(tambin llamado diff o delta), es la modificacin en un archivo bajo control de revisiones.
  • Lacombinacin(o integracin), se produce al unir los cambios en un archivo (o grupo de archivos), generando una revisin unificada.

19. Parche

  • Tambin llamado Lista o Conjunto de cambios.
  • Es la lista de cambios generada al comparar revisiones, y que puede usarse para reproducir automticamente las modificaciones hechas en el cdigo.
  • Generalmente el resultado de cometer los cambios al repositorio.

20. Flujos de trabajo con SCVs 21. Trabajo en solitario

  • La forma mas simple de trabajo.
  • til para proyectos pequeos, o al inicio de uno que crecer paulatinamente.
  • Se puede usar tanto con SCVs centralizados como descentralizados.

22. Trabajo en pares

  • Usado en desarrollos desde pequeos a medianos.
  • Ideal para el mtodo de Programacin en pares (Pair Programming).
  • Requiere de un SCV descentralizado.

23. Repositorio centralizado

  • Cuando mltiples personas colaboran en un proyecto.
  • La informacin se sincroniza a travs del repositorio central, en un servidor dedicado.
  • Conexin de red es imprescindible para almacenar los cambios.

24. Repositorio centralizado con opcin local

  • Similar al flujo centralizado.
  • Se pueden hacer y almacenar cambios localmente.
  • Los cambios, luego se envan al repositorio central.
  • Algunos SCVs descentralizados pueden trabajar de esta forma.

25. Trabajo distribuidocon una lnea principal

  • Cada desarrollador tiene su propia rama (o ramas) de trabajo independiente.
  • Adems, todos tienen autorizacin para poder enviar cambios a la rama principal.

26. Trabajo distribuido con supervisin humana

  • Parecido al flujo anterior, pero:
    • Todos pueden leer de la rama principal.
    • Slo una persona puede registrar cambios en la rama principal.
    • Otros desarrolladores combinan cambios con esta persona.
    • Permite tener varias lineas principales en paralelo: estable, desarrollo, etc.

27. Trabajo distribuido con supervisin automtica

  • Como el flujo anterior, pero usando software en lugar de una persona.
  • Usar reglas de seleccin, aceptacin y combinacin.
  • El sistema de control puede estar en un servidor separado (ej. PQM)

28. Sistemas de Control de Versiones ms conocidos y usados 29. CVS

  • C oncurrentV ersioningS ystem
    • Desarrollado en los 80s por Dick Grune.
    • Popular en lo 90s con proyectos de Cdigo Libre.
  • Usan un repositorio centralizado.
  • Se puede usar en flujos de trabajo en solitario, o centralizados.
  • Tiene problemas con algunas operaciones en archivos (ej. renombrar, mover)

30. SVN

  • Subversion
    • Desarrollado desde el 2000 por CollabNet, Inc.
    • Creado para reemplazar y mejorar CVS.
  • Usa un repositorio central para almacenar cambios.
  • Se ha integrado a IDEs, y existen interfaces grficas para mltiples SO.
  • Muchos proyectos han migrado de CVS a SVN exitsamente.

31. Git

  • Es en realidad una serie de herramientas relacionadas: Cogio, StGIT, etc.
    • Creado por Linus Torvalds en el 2005.
    • Usado principalmente en el Kernel de Linux.
  • Usa repositorios descentralizados.
  • Algunos proyectos de Cdigo Libre estn adoptando su uso en reemplazo de CVS o SVN.

32. Darcs

  • Sistema distribuido e interactivo, que permite la creacin espontnea de ramas de desarrollo.
  • Creado por David Roundy (fsico), basado en un teora propia acerca del lgebra de parches
  • Para ms detalles acerca de la teora ver: http://www.darcs.net/manual/node8.html

33. Bazaar

  • Basado en sistemas como GNU arch y tla.
  • Desarrollado por Robert Collins (Canonical), y su equipo desde el 2005.
  • Usado en el manejo de proyectos en Canonical, Ubuntu (y derivados), etc.
  • Permite mltiples diferentes flujos de trabajo, incluyendo la migracin de un flujo sencillo a uno ms complejo.

34. Bazaar: Detalles tcnicos

  • Est escrito enteramente en Python.
  • Funciona en mltiples Sistemas Operativos: Unix, Linux, Microsoft Windows, Mac OS X, etc.
  • Puede acceder a repositorios usando HTTP/HTTPS, FTP, SFTP/SSH, WebDAV.
  • API para integracin con otras herramientas (IDEs, servidores, etc.)

35. Como trabajamos con SCVs

  • Creamos la copia local del proyecto.
  • Editamos los archivos de cdigo.
  • Revisamos los cambios contra el respositorio, antes de guardarlos en este.
  • Peridicamente, combinamos los cambios hechos por otros.
  • Regresamos a (2), hasta que terminemos el proyecto.

36. Usando Bazaar (1)

  • Creemos un proyecto como ejemplo $ mkdir miproyecto $ cd miproyecto
  • Editemos un archivo $ vim micodigo.php
  • Digamos a bazaar quines somos $ bzr whoami Juan Perez

37. Usando Bazaar (2)

  • Iniciemos el repositorio local $ bzr init
  • Agreguemos el archivo editado $ bzr add micodigo.php
  • Guardemos la primera revisin $ bzr commit -m Primera revisin

38. Usando Bazaar (3)

  • Modifiquemos nuestro cdigo $ vim micodigo.php (le aadimos algo)
  • Revisemos las diferencias $ bzr diff micodigo.php
  • Tambin las podemos ver coloreadas $ bzr cdiff micodigo.php
  • Luego podemos aadir los cambios al repositorio local.

39. Usando Bazaar (4)

  • Adems, podemos publicar nuestra rama de desarrollo a un servidor usando el protocolo que ms nos convenga (HTTP/HTTPS, WebDAV, SFTP, etc.) $ bzr push sftp://usuario@servidor/ruta/al/repo

40. Usando Bazaar (5)

  • Otros pueden acceder a esa rama y conseguir una copia local $ bzr branch http://servidor/ruta/al/repo
  • Si editamos la copia local, podemos hacer varias operaciones que van a compararse con el repositorio original, por ejemplo: $ bzr status $ bzr diff $ bzr log

41. Usando Bazaar (6)

  • Inclusive podemos combinar nuestros cambios con los de otra rama, no necesariamente la original $ bzr merge http://servidor/ruta/otra/rama
  • Opcionalmente podemos generar un archivo parche que otros puedan usar para agregar nuestros cambios $ bzr pull (para tener la ltima versin) $ bzr send -o miparche.txt

42. Usando Bazaar (7)

  • Cuando estamos listos para tener una versin para uso general, etiquetamos la rama de trabajo, y la empaquetamos $ bzr tag VERSION_2_FINAL $ bzr export /ruta/misoftware-2.0-final.zip

43. Usando Bazaar (8)

  • Si cometemos errores, Bazaar nos ayuda $ rm micodigo.php (Uy!, lo borramos) $ bzr revert micodig.php (Si!)
  • Si aadimos el archivo equivocado, no hay problema: $ bzr add miprueba.php $ bzr remove --keep miprueba.php
  • Y si registramos (commit) algo por error $ bzr uncommit (Y aqu no paso nada)

44. Palabras finales

  • Una de las herramientas clave para manejar cdigo, es un Sistema de Control de Versiones.
  • Un buen SCV es simple de usar, y nos ayuda a recuperarnos de errores.
  • Bazaar, es un SCV, que permite trabajar tanto en solitario, como en grupo.
  • Bazaar soporta mltiples plataformas, lo que lo hace deutilidad universal .

45. Referencias

  • Bazaar (SCV de Canonical/Ubuntu)
    • http://bazaar-vcs.org/Documentation
  • Libros libres:
    • Open Source Development with CVS http://cvsbook.red-bean.com/
    • Version Control with Subversion http://svnbook.red-bean.com/
    • Producing Open Source Software http://producingoss.com/

46. Gracias! Preguntas? Jess M. Castagnetto [email_address]