- 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
- 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)
- Control de archivos individuales.
- Almacenamiento de local (en el mismo directorio) de
revisiones.
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)
- Control de rboles de archivos.
- Almacenamiento centralizado de revisiones.
- Manejo deficiente de algunas operaciones (ej. renombrado de
archivos).
CVS: http://en.wikipedia.org/wiki/Concurrent_Versions_System 9.
Desarrollo de los SCV (3)
- Control de rboles de archivos.
- Almacenamiento centralizado de revisiones.
- Manejo completo de operaciones complejas con archivos.
SVN: http://en.wikipedia.org/wiki/Subversion_(software) 10.
Desarrollo de los SCV (4)
- Control de rboles de archivos.
- Almacenamiento descentralizado de revisiones.
- Manejo deficiente de algunos flujos de trabajo y consolidacin
compleja.
GNU arch: http://en.wikipedia.org/wiki/GNU_arch 11. Desarrollo
de los SCV (5)
- Control de rboles de archivos.
- Almacenamiento descentralizado de revisiones.
- Manejo de mltiples flujos de trabajo, inlcuyendo el
centralizado.
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
-
- 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
-
- 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]