Sistemas para el Control de Versiones de Código
-
Upload
jesus-castagnetto -
Category
Technology
-
view
9.100 -
download
0
description
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]