Buenas Prácticas de Programación Sistemas para el Control de Versiones de Código Jesús M. Castagnetto M., Ph.D. jesus@upch...
Agenda <ul><li>¿Qué es un Sistema de Control de Versiones? (SCV) </li></ul><ul><li>Conceptos principales en SCVs </li></ul...
S istema de  C ontrol de  V ersiones <ul><li>Permite el manejo de múltiples revisiones </li></ul><ul><li>Actúa a niveles d...
¿Qué puede controlar un SCV? <ul><li>Archivos Los más simples, controlan solamente archivos individuales. </li></ul><ul><l...
¿Cómo puede trabajar un SCV? <ul><li>Local   Información acerca de cambios se mantiene en un repositorio local. </li></ul>...
Evolución de los SCV
Desarrollo de los SCV (1) <ul><li>Primera Generación </li></ul><ul><li>Control de archivos individuales. </li></ul><ul><li...
Desarrollo de los SCV (2) <ul><li>Segunda Generación </li></ul><ul><li>Control de árboles de archivos. </li></ul><ul><li>A...
Desarrollo de los SCV (3) <ul><li>Tercera Generación </li></ul><ul><li>Control de árboles de archivos. </li></ul><ul><li>A...
Desarrollo de los SCV (4) <ul><li>Cuarta Generación </li></ul><ul><li>Control de árboles de archivos. </li></ul><ul><li>Al...
Desarrollo de los SCV (5) <ul><li>Quinta Generación </li></ul><ul><li>Control de árboles de archivos. </li></ul><ul><li>Al...
Conceptos básicos de SCV
Revisión <ul><li>Es una visión estática en el tiempo, del estado de un grupo de archivos y directorios. </li></ul><ul><li>...
Copia de trabajo <ul><li>También llamado “Árbol de trabajo”. </li></ul><ul><li>Es el conjunto de directorios y archivos ma...
Rama de trabajo (o desarollo) <ul><li>En el caso mas simple, una  rama  es un conjunto ordenado de revisiones. </li></ul><...
Repositorio <ul><li>Un sitio de almacenamiento de revisiones. </li></ul><ul><li>Puede estar estructurado internamente como...
Conflicto y Resolución <ul><li>Ocurre cuando dos personas han hecho cambios contradictorios en un mismo documento (o grupo...
Cambio y Combinación <ul><li>Un  cambio  (también llamado “diff” o “delta”), es la modificación en un archivo bajo control...
Parche <ul><li>También llamado Lista o Conjunto de cambios. </li></ul><ul><li>Es la lista de cambios generada al comparar ...
Flujos de trabajo con SCVs
Trabajo en solitario <ul><li>La forma mas simple de trabajo. </li></ul><ul><li>Útil para proyectos pequeños, o al inicio d...
Trabajo en pares <ul><li>Usado en desarrollos desde pequeños a medianos. </li></ul><ul><li>Ideal para el método de “Progra...
Repositorio centralizado <ul><li>Cuando múltiples personas colaboran en un proyecto. </li></ul><ul><li>La información se s...
Repositorio centralizado con opción local <ul><li>Similar al flujo centralizado. </li></ul><ul><li>Se pueden hacer y almac...
Trabajo distribuido  con una línea principal <ul><li>Cada desarrollador tiene su propia rama (o ramas) de trabajo independ...
Trabajo distribuido con supervisión humana <ul><li>Parecido al flujo anterior, pero: </li></ul><ul><ul><li>Todos pueden le...
Trabajo distribuido con supervisión automática <ul><li>Como el flujo anterior, pero usando software en lugar de una person...
Sistemas de Control de Versiones más conocidos y usados
CVS <ul><li>C oncurrent  V ersioning  S ystem </li></ul><ul><ul><li>Desarrollado en los 80s por Dick Grune. </li></ul></ul...
SVN <ul><li>Subversion </li></ul><ul><ul><li>Desarrollado desde el 2000 por CollabNet, Inc. </li></ul></ul><ul><ul><li>Cre...
Git <ul><li>Es en realidad una serie de herramientas relacionadas: Cogio, StGIT, etc. </li></ul><ul><ul><li>Creado por Lin...
Darcs <ul><li>Sistema distribuido e interactivo, que permite la creación “espontánea” de ramas de desarrollo. </li></ul><u...
Bazaar <ul><li>Basado en sistemas como GNU arch y tla. </li></ul><ul><li>Desarrollado por Robert Collins (Canonical), y su...
Bazaar: Detalles técnicos <ul><li>Está escrito enteramente en Python. </li></ul><ul><li>Funciona en múltiples Sistemas Ope...
Como trabajamos con SCVs <ul><li>Creamos la copia local del proyecto. </li></ul><ul><li>Editamos los archivos de código. <...
Usando Bazaar (1) <ul><li>Creemos un proyecto como ejemplo $ mkdir miproyecto $ cd miproyecto </li></ul><ul><li>Editemos u...
Usando Bazaar (2) <ul><li>Iniciemos el repositorio local $ bzr init </li></ul><ul><li>Agreguemos el archivo editado $ bzr ...
Usando Bazaar (3) <ul><li>Modifiquemos nuestro código $ vim micodigo.php (le añadimos algo) </li></ul><ul><li>Revisemos la...
Usando Bazaar (4) <ul><li>Además, podemos publicar nuestra rama de desarrollo a un servidor usando el protocolo que más no...
Usando Bazaar (5) <ul><li>Otros pueden acceder a esa rama y conseguir una copia local $ bzr branch http://servidor/ruta/al...
Usando Bazaar (6) <ul><li>Inclusive podemos combinar nuestros cambios con los de otra rama, no necesariamente la original ...
Usando Bazaar (7) <ul><li>Cuando estamos listos para tener una versión para uso general, etiquetamos la rama de trabajo, y...
Usando Bazaar (8) <ul><li>Si cometemos errores, Bazaar nos ayuda $ rm micodigo.php   (¡Uy!, lo borramos) $ bzr revert mico...
Palabras finales <ul><li>Una de las herramientas clave para manejar código, es un Sistema de Control de Versiones. </li></...
Referencias <ul><li>Bazaar (SCV de Canonical/Ubuntu) </li></ul><ul><ul><li>http://bazaar-vcs.org/Documentation </li></ul><...
¡Gracias! ¿Preguntas? Jesús M. Castagnetto [email_address]
Upcoming SlideShare
Loading in …5
×

Sistemas para el Control de Versiones de Código

10,246 views

Published on

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.

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
10,246
On SlideShare
0
From Embeds
0
Number of Embeds
69
Actions
Shares
0
Downloads
312
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide
  • Sistemas para el Control de Versiones de Código

    1. 1. Buenas Prácticas de Programación Sistemas para el Control de Versiones de Código Jesús M. Castagnetto M., Ph.D. jesus@upch.edu.pe - jmcastagnetto@php.net http://www.castagnetto.com/
    2. 2. Agenda <ul><li>¿Qué es un Sistema de Control de Versiones? (SCV) </li></ul><ul><li>Conceptos principales en SCVs </li></ul><ul><li>Sistemas SCV más usados </li></ul><ul><li>Bazaar, un SCV flexible y simple </li></ul><ul><li>Donde conseguir mas información </li></ul>
    3. 3. S istema de C ontrol de V ersiones <ul><li>Permite el manejo de múltiples revisiones </li></ul><ul><li>Actúa a niveles de archivo de código, directorio, proyecto, etc. </li></ul><ul><li>Se encarga de identificar, comparar, revertir, etc., cambios en la información </li></ul><ul><li>Ayuda en el desarrollo paralelo de un proyecto, por múltiples programadores. </li></ul>
    4. 4. ¿Qué puede controlar un SCV? <ul><li>Archivos Los más simples, controlan solamente archivos individuales. </li></ul><ul><li>Árboles de archivos Los más avanzados, pueden manejar directorios (y sub-directorios) con sus archivos asociados, incluyendo el concepto de proyecto. </li></ul>
    5. 5. ¿Cómo puede trabajar un SCV? <ul><li>Local Información acerca de cambios se mantiene en un repositorio local. </li></ul><ul><li>Centralizado Necesitan el uso de un servidor y repositorio central. </li></ul><ul><li>Descentralizado Permiten el uso de múltiples repositorios, y sincronización entre ellos. </li></ul>
    6. 6. Evolución de los SCV
    7. 7. Desarrollo de los SCV (1) <ul><li>Primera Generación </li></ul><ul><li>Control de archivos individuales. </li></ul><ul><li>Almacenamiento de local (en el mismo directorio) de revisiones. </li></ul><ul><li>Ejemplos: SCCS, RCS. </li></ul>SCCS: http://en.wikipedia.org/wiki/Source_Code_Control_System RCS: http://en.wikipedia.org/wiki/Revision_Control_System
    8. 8. Desarrollo de los SCV (2) <ul><li>Segunda Generación </li></ul><ul><li>Control de árboles de archivos. </li></ul><ul><li>Almacenamiento centralizado de revisiones. </li></ul><ul><li>Manejo deficiente de algunas operaciones (ej. renombrado de archivos). </li></ul><ul><li>Ejemplo: CVS. </li></ul>CVS: http://en.wikipedia.org/wiki/Concurrent_Versions_System
    9. 9. Desarrollo de los SCV (3) <ul><li>Tercera Generación </li></ul><ul><li>Control de árboles de archivos. </li></ul><ul><li>Almacenamiento centralizado de revisiones. </li></ul><ul><li>Manejo completo de operaciones complejas con archivos. </li></ul><ul><li>Ejemplo: Subversion. </li></ul>SVN: http://en.wikipedia.org/wiki/Subversion_(software)
    10. 10. Desarrollo de los SCV (4) <ul><li>Cuarta Generación </li></ul><ul><li>Control de árboles de archivos. </li></ul><ul><li>Almacenamiento descentralizado de revisiones. </li></ul><ul><li>Manejo deficiente de algunos flujos de trabajo y consolidación compleja. </li></ul><ul><li>Ejemplo: GNU arch. </li></ul>GNU arch: http://en.wikipedia.org/wiki/GNU_arch
    11. 11. Desarrollo de los SCV (5) <ul><li>Quinta Generación </li></ul><ul><li>Control de árboles de archivos. </li></ul><ul><li>Almacenamiento descentralizado de revisiones. </li></ul><ul><li>Manejo de múltiples flujos de trabajo, inlcuyendo el centralizado. </li></ul><ul><li>Ejemplo: Bazaar. </li></ul>Bazaar: http://bazaar-vcs.org/
    12. 12. Conceptos básicos de SCV
    13. 13. Revisión <ul><li>Es una visión estática en el tiempo, del estado de un grupo de archivos y directorios. </li></ul><ul><li>Tiene asociada metadata (fecha, identidad de quién hizo modificaciones, etc.) </li></ul><ul><li>Posee una etiqueta (número de revisión, etc.) que la identifica únicamente. </li></ul>
    14. 14. Copia de trabajo <ul><li>También llamado “Árbol de trabajo”. </li></ul><ul><li>Es el conjunto de directorios y archivos manejados por el SCV, y que están bajo edición activa. </li></ul><ul><li>Está asociado a una rama de trabajo en particular. </li></ul>
    15. 15. Rama de trabajo (o desarollo) <ul><li>En el caso mas simple, una rama es un conjunto ordenado de revisiones. </li></ul><ul><li>La revisión más reciente se denomina la “cabeza” (head) o “principal” (main). </li></ul><ul><li>Las ramas se pueden separar y juntar como se necesite, formando un grafo de revisión (que es un Grafo Acíclico Directo, DAG). </li></ul>
    16. 16. Repositorio <ul><li>Un sitio de almacenamiento de revisiones. </li></ul><ul><li>Puede estar estructurado internamente como un solo archivo, una colección de archivos, base de datos, etc. </li></ul><ul><li>Puede residir localmente (en el mismo sistema de archivos), o ser remoto (servidor o servidores). </li></ul>
    17. 17. Conflicto y Resolución <ul><li>Ocurre cuando dos personas han hecho cambios contradictorios en un mismo documento (o grupo de documentos). </li></ul><ul><li>Los SCVs sólo alertan acerca de un conflicto, los humanos tienen que solucionarlo. </li></ul><ul><li>El proceso de resolver un conflicto es denominado resolución . </li></ul>
    18. 18. Cambio y Combinación <ul><li>Un cambio (también llamado “diff” o “delta”), es la modificación en un archivo bajo control de revisiones. </li></ul><ul><li>La combinación (o integración), se produce al unir los cambios en un archivo (o grupo de archivos), generando una revisión unificada. </li></ul>
    19. 19. Parche <ul><li>También llamado Lista o Conjunto de cambios. </li></ul><ul><li>Es la lista de cambios generada al comparar revisiones, y que puede usarse para reproducir automáticamente las modificaciones hechas en el código. </li></ul><ul><li>Generalmente el resultado de cometer los cambios al repositorio. </li></ul>
    20. 20. Flujos de trabajo con SCVs
    21. 21. Trabajo en solitario <ul><li>La forma mas simple de trabajo. </li></ul><ul><li>Útil para proyectos pequeños, o al inicio de uno que crecerá paulatinamente. </li></ul><ul><li>Se puede usar tanto con SCVs centralizados como descentralizados. </li></ul>
    22. 22. Trabajo en pares <ul><li>Usado en desarrollos desde pequeños a medianos. </li></ul><ul><li>Ideal para el método de “Programación en pares” (Pair Programming). </li></ul><ul><li>Requiere de un SCV descentralizado. </li></ul>
    23. 23. Repositorio centralizado <ul><li>Cuando múltiples personas colaboran en un proyecto. </li></ul><ul><li>La información se sincroniza a través del repositorio central, en un servidor dedicado. </li></ul><ul><li>Conexión de red es imprescindible para almacenar los cambios. </li></ul>
    24. 24. Repositorio centralizado con opción local <ul><li>Similar al flujo centralizado. </li></ul><ul><li>Se pueden hacer y almacenar cambios localmente. </li></ul><ul><li>Los cambios, luego se envían al repositorio central. </li></ul><ul><li>Algunos SCVs descentralizados pueden trabajar de esta forma. </li></ul>
    25. 25. Trabajo distribuido con una línea principal <ul><li>Cada desarrollador tiene su propia rama (o ramas) de trabajo independiente. </li></ul><ul><li>Además, todos tienen autorización para poder enviar cambios a la rama principal. </li></ul>
    26. 26. Trabajo distribuido con supervisión humana <ul><li>Parecido al flujo anterior, pero: </li></ul><ul><ul><li>Todos pueden leer de la rama principal. </li></ul></ul><ul><ul><li>Sólo una persona puede registrar cambios en la rama principal. </li></ul></ul><ul><ul><li>Otros desarrolladores combinan cambios con esta persona. </li></ul></ul><ul><ul><li>Permite tener varias “lineas principales” en paralelo: estable, desarrollo, etc. </li></ul></ul>
    27. 27. Trabajo distribuido con supervisión automática <ul><li>Como el flujo anterior, pero usando software en lugar de una persona. </li></ul><ul><li>Usar reglas de selección, aceptación y combinación. </li></ul><ul><li>El sistema de control puede estar en un servidor separado (ej. PQM) </li></ul>
    28. 28. Sistemas de Control de Versiones más conocidos y usados
    29. 29. CVS <ul><li>C oncurrent V ersioning S ystem </li></ul><ul><ul><li>Desarrollado en los 80s por Dick Grune. </li></ul></ul><ul><ul><li>Popular en lo 90s con proyectos de Código Libre. </li></ul></ul><ul><li>Usan un repositorio centralizado. </li></ul><ul><li>Se puede usar en flujos de trabajo en solitario, o centralizados. </li></ul><ul><li>Tiene problemas con algunas operaciones en archivos (ej. renombrar, mover) </li></ul>
    30. 30. SVN <ul><li>Subversion </li></ul><ul><ul><li>Desarrollado desde el 2000 por CollabNet, Inc. </li></ul></ul><ul><ul><li>Creado para reemplazar y mejorar CVS. </li></ul></ul><ul><li>Usa un repositorio central para almacenar cambios. </li></ul><ul><li>Se ha integrado a IDEs, y existen interfaces gráficas para múltiples SO. </li></ul><ul><li>Muchos proyectos han migrado de CVS a SVN exitósamente. </li></ul>
    31. 31. Git <ul><li>Es en realidad una serie de herramientas relacionadas: Cogio, StGIT, etc. </li></ul><ul><ul><li>Creado por Linus Torvalds en el 2005. </li></ul></ul><ul><ul><li>Usado principalmente en el Kernel de Linux. </li></ul></ul><ul><li>Usa repositorios descentralizados. </li></ul><ul><li>Algunos proyectos de Código Libre están adoptando su uso en reemplazo de CVS o SVN. </li></ul>
    32. 32. Darcs <ul><li>Sistema distribuido e interactivo, que permite la creación “espontánea” de ramas de desarrollo. </li></ul><ul><li>Creado por David Roundy (físico), basado en un teoría propia acerca del álgebra de parches </li></ul><ul><li>Para más detalles acerca de la teoría ver: http://www.darcs.net/manual/node8.html </li></ul>
    33. 33. Bazaar <ul><li>Basado en sistemas como GNU arch y tla. </li></ul><ul><li>Desarrollado por Robert Collins (Canonical), y su equipo desde el 2005. </li></ul><ul><li>Usado en el manejo de proyectos en Canonical, Ubuntu (y derivados), etc. </li></ul><ul><li>Permite múltiples diferentes flujos de trabajo, incluyendo la migración de un flujo sencillo a uno más complejo. </li></ul>
    34. 34. Bazaar: Detalles técnicos <ul><li>Está escrito enteramente en Python. </li></ul><ul><li>Funciona en múltiples Sistemas Operativos: Unix, Linux, Microsoft Windows, Mac OS X, etc. </li></ul><ul><li>Puede acceder a repositorios usando HTTP/HTTPS, FTP, SFTP/SSH, WebDAV. </li></ul><ul><li>API para integración con otras herramientas (IDEs, servidores, etc.) </li></ul>
    35. 35. Como trabajamos con SCVs <ul><li>Creamos la copia local del proyecto. </li></ul><ul><li>Editamos los archivos de código. </li></ul><ul><li>Revisamos los cambios contra el respositorio, antes de guardarlos en este. </li></ul><ul><li>Periódicamente, combinamos los cambios hechos por otros. </li></ul><ul><li>Regresamos a (2), hasta que terminemos el proyecto. </li></ul>
    36. 36. Usando Bazaar (1) <ul><li>Creemos un proyecto como ejemplo $ mkdir miproyecto $ cd miproyecto </li></ul><ul><li>Editemos un archivo $ vim micodigo.php </li></ul><ul><li>Digamos a bazaar quiénes somos $ bzr whoami “Juan Perez <jperez@example.com>” </li></ul>
    37. 37. Usando Bazaar (2) <ul><li>Iniciemos el repositorio local $ bzr init </li></ul><ul><li>Agreguemos el archivo editado $ bzr add micodigo.php </li></ul><ul><li>Guardemos la primera revisión $ bzr commit -m “Primera revisión” </li></ul>
    38. 38. Usando Bazaar (3) <ul><li>Modifiquemos nuestro código $ vim micodigo.php (le añadimos algo) </li></ul><ul><li>Revisemos las diferencias $ bzr diff micodigo.php </li></ul><ul><li>También las podemos ver coloreadas $ bzr cdiff micodigo.php </li></ul><ul><li>Luego podemos añadir los cambios al repositorio local. </li></ul>
    39. 39. Usando Bazaar (4) <ul><li>Además, podemos publicar nuestra rama de desarrollo a un servidor usando el protocolo que más nos convenga (HTTP/HTTPS, WebDAV, SFTP, etc.) $ bzr push sftp://usuario@servidor/ruta/al/repo </li></ul>
    40. 40. Usando Bazaar (5) <ul><li>Otros pueden acceder a esa rama y conseguir una copia local $ bzr branch http://servidor/ruta/al/repo </li></ul><ul><li>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 </li></ul>
    41. 41. Usando Bazaar (6) <ul><li>Inclusive podemos combinar nuestros cambios con los de otra rama, no necesariamente la original $ bzr merge http://servidor/ruta/otra/rama </li></ul><ul><li>Opcionalmente podemos generar un archivo “parche” que otros puedan usar para agregar nuestros cambios $ bzr pull (para tener la última versión) $ bzr send -o miparche.txt </li></ul>
    42. 42. Usando Bazaar (7) <ul><li>Cuando estamos listos para tener una versión para uso general, etiquetamos la rama de trabajo, y la empaquetamos $ bzr tag VERSION_2_FINAL $ bzr export /ruta/misoftware-2.0-final.zip </li></ul>
    43. 43. Usando Bazaar (8) <ul><li>Si cometemos errores, Bazaar nos ayuda $ rm micodigo.php (¡Uy!, lo borramos) $ bzr revert micodig.php (¡Si!) </li></ul><ul><li>Si añadimos el archivo equivocado, no hay problema: $ bzr add miprueba.php $ bzr remove --keep miprueba.php </li></ul><ul><li>Y si registramos (“commit”) algo por error $ bzr uncommit (Y aquí no paso nada) </li></ul>
    44. 44. Palabras finales <ul><li>Una de las herramientas clave para manejar código, es un Sistema de Control de Versiones. </li></ul><ul><li>Un buen SCV es simple de usar, y nos ayuda a recuperarnos de errores. </li></ul><ul><li>Bazaar, es un SCV, que permite trabajar tanto en solitario, como en grupo. </li></ul><ul><li>Bazaar soporta múltiples plataformas, lo que lo hace de utilidad universal . </li></ul>
    45. 45. Referencias <ul><li>Bazaar (SCV de Canonical/Ubuntu) </li></ul><ul><ul><li>http://bazaar-vcs.org/Documentation </li></ul></ul><ul><li>Libros libres: </li></ul><ul><ul><li>“Open Source Development with CVS” http://cvsbook.red-bean.com/ </li></ul></ul><ul><ul><li>“Version Control with Subversion” http://svnbook.red-bean.com/ </li></ul></ul><ul><ul><li>“Producing Open Source Software” http://producingoss.com/ </li></ul></ul>
    46. 46. ¡Gracias! ¿Preguntas? Jesús M. Castagnetto [email_address]

    ×