Download - Sistemas para el Control de Versiones de Código

Transcript
  • 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]