Sistemas para el Control de Versiones de Código

jesus.castagnetto 5,550 views 46 slides Sep 28, 2008
Slide 1
Slide 1 of 46
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46

About This Presentation

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.


Slide Content

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Buenas Prácticas de Programación
Sistemas para el Control de Sistemas para el Control de
Versiones de CódigoVersiones de Código
Jesús M. Castagnetto M., Ph.D.
[email protected] - [email protected]
http://www.castagnetto.com/

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Agenda
●¿Qué es un Sistema de Control de
Versiones? (SCV)
●Conceptos principales en SCVs
●Sistemas SCV más usados
●Bazaar, un SCV flexible y simple
●Donde conseguir mas información

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Sistema de Control de Versiones
●Permite el manejo de múltiples revisiones
●Actúa a niveles de archivo de código,
directorio, proyecto, etc.
●Se encarga de identificar, comparar,
revertir, etc., cambios en la información
●Ayuda en el desarrollo paralelo de un
proyecto, por múltiples programadores.

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
¿Qué puede controlar un SCV?
●Archivos
Los más simples, controlan solamente
archivos individuales.
●Árboles de archivos
Los más avanzados, pueden manejar
directorios (y sub-directorios) con sus
archivos asociados, incluyendo el concepto
de proyecto.

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
¿Cómo puede trabajar un SCV?
●Local
Información acerca de cambios se
mantiene en un repositorio local.
●Centralizado
Necesitan el uso de un servidor y
repositorio central.
●Descentralizado
Permiten el uso de múltiples repositorios, y
sincronización entre ellos.

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Evolución de los SCV
19701975198019861991199720022008
0
1
2
3
4
5
6
SCCS (1972)
RCS (1980)
CVS (1986)
Subversion (2000)
GNU arch (2003)
Bazaar (2005)
G
e
n
e
r
a
c

n

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Desarrollo de los SCV (1)
Primera Generación
●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

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Desarrollo de los SCV (2)
Segunda Generación
●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

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Desarrollo de los SCV (3)
Tercera Generación
●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)

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Desarrollo de los SCV (4)
Cuarta Generación
●Control de árboles de archivos.
●Almacenamiento descentralizado de
revisiones.
●Manejo deficiente de algunos flujos de
trabajo y consolidación compleja.
●Ejemplo: GNU arch.
GNU arch: http://en.wikipedia.org/wiki/GNU_arch

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Desarrollo de los SCV (5)
Quinta Generación
●Control de árboles de archivos.
●Almacenamiento descentralizado de
revisiones.
●Manejo de múltiples flujos de trabajo,
inlcuyendo el centralizado.
●Ejemplo: Bazaar.
Bazaar: http://bazaar-vcs.org/

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Conceptos básicos de SCV

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Revisión
●Es una visión estática en el tiempo, del
estado de un grupo de archivos y
directorios.
●Tiene asociada metadata (fecha, identidad
de quién hizo modificaciones, etc.)
●Posee una etiqueta (número de revisión,
etc.) que la identifica únicamente.

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Copia de trabajo
●También llamado “Árbol de trabajo”.
●Es el conjunto de directorios y archivos
manejados por el SCV, y que están bajo
edición activa.
●Está asociado a una rama de trabajo en
particular.

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Rama de trabajo (o desarollo)
●En el caso mas simple, una rama es un
conjunto ordenado de revisiones.
●La revisión más reciente se denomina la
“cabeza” (head) o “principal” (main).
●Las ramas se pueden separar y juntar
como se necesite, formando un grafo de
revisión (que es un Grafo Acíclico Directo,
DAG).

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Repositorio
●Un sitio de almacenamiento de revisiones.
●Puede estar estructurado internamente
como un solo archivo, una colección de
archivos, base de datos, etc.
●Puede residir localmente (en el mismo
sistema de archivos), o ser remoto
(servidor o servidores).

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Conflicto y Resolución
●Ocurre cuando dos personas han hecho
cambios contradictorios en un mismo
documento (o grupo de documentos).
●Los SCVs sólo alertan acerca de un
conflicto, los humanos tienen que
solucionarlo.
●El proceso de resolver un conflicto es
denominado resolución.

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Cambio y Combinación
●Un cambio (también llamado “diff” o
“delta”), es la modificación en un archivo
bajo control de revisiones.
●La combinación (o integración), se produce
al unir los cambios en un archivo (o grupo
de archivos), generando una revisión
unificada.

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Parche
●También llamado Lista o Conjunto de
cambios.
●Es la lista de cambios generada al
comparar revisiones, y que puede usarse
para reproducir automáticamente las
modificaciones hechas en el código.
●Generalmente el resultado de cometer los
cambios al repositorio.

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Flujos de trabajo con SCVs

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Trabajo en solitario
●La forma mas simple de trabajo.
●Útil para proyectos pequeños, o al inicio de
uno que crecerá paulatinamente.
●Se puede usar tanto con SCVs
centralizados como descentralizados.

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Trabajo en pares
●Usado en desarrollos desde pequeños a
medianos.
●Ideal para el método de “Programación en
pares” (Pair Programming).
●Requiere de un SCV descentralizado.

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Repositorio centralizado
●Cuando múltiples
personas colaboran
en un proyecto.
●La información se
sincroniza a través
del repositorio
central, en un
servidor dedicado.
●Conexión de red es
imprescindible para
almacenar los
cambios.

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Repositorio centralizado
con opción local
●Similar al flujo
centralizado.
●Se pueden hacer y
almacenar cambios
localmente.
●Los cambios, luego
se envían al
repositorio central.
●Algunos SCVs
descentralizados
pueden trabajar de
esta forma.

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Trabajo distribuido
con una línea principal
●Cada desarrollador tiene su propia rama (o
ramas) de trabajo independiente.
●Además, todos tienen autorización para
poder enviar cambios a la rama principal.

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Trabajo distribuido con
supervisión humana
●Parecido al flujo
anterior, pero:
–Todos pueden leer de
la rama principal.
–Sólo 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.

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Trabajo distribuido con
supervisión automática
●Como el flujo
anterior, pero
usando software en
lugar de una
persona.
●Usar reglas de
selección,
aceptación y
combinación.
●El sistema de
control puede estar
en un servidor
separado (ej. PQM)

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Sistemas de Control de Versiones
más conocidos y usados

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
CVS
●Concurrent Versioning System
–Desarrollado en los 80s por Dick Grune.
–Popular en lo 90s con proyectos de Código 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)

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
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 gráficas para múltiples SO.
●Muchos proyectos han migrado de CVS a
SVN exitósamente.

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
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 Código Libre están
adoptando su uso en reemplazo de CVS o
SVN.

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Darcs
●Sistema distribuido e interactivo, que
permite la creación “espontánea” de ramas
de desarrollo.
●Creado por David Roundy (físico), basado
en un teoría propia acerca del álgebra de
parches
●Para más detalles acerca de la teoría ver:
http://www.darcs.net/manual/node8.html

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
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 múltiples diferentes flujos de
trabajo, incluyendo la migración de un flujo
sencillo a uno más complejo.

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Bazaar: Detalles técnicos
●Está escrito enteramente en Python.
●Funciona en múltiples Sistemas
Operativos: Unix, Linux, Microsoft
Windows, Mac OS X, etc.
●Puede acceder a repositorios usando
HTTP/HTTPS, FTP, SFTP/SSH, WebDAV.
●API para integración con otras
herramientas (IDEs, servidores, etc.)

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Como trabajamos con SCVs
(1) Creamos la copia local del proyecto.
(2) Editamos los archivos de código.
(3) Revisamos los cambios contra el
respositorio, antes de guardarlos en este.
(4) Periódicamente, combinamos los
cambios hechos por otros.
(5) Regresamos a (2), hasta que
terminemos el proyecto.

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Usando Bazaar (1)
●Creemos un proyecto como ejemplo
$ mkdir miproyecto
$ cd miproyecto
●Editemos un archivo
$ vim micodigo.php
●Digamos a bazaar quiénes somos
$ bzr whoami “Juan Perez
<[email protected]>”

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Usando Bazaar (2)
●Iniciemos el repositorio local
$ bzr init
●Agreguemos el archivo editado
$ bzr add micodigo.php
●Guardemos la primera revisión
$ bzr commit -m “Primera revisión”

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Usando Bazaar (3)
●Modifiquemos nuestro código
$ vim micodigo.php
(le añadimos algo)
●Revisemos las diferencias
$ bzr diff micodigo.php
●También las podemos ver coloreadas
$ bzr cdiff micodigo.php
●Luego podemos añadir los cambios al
repositorio local.

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Usando Bazaar (4)
●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

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
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

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
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 versión)
$ bzr send -o miparche.txt

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Usando Bazaar (7)
●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

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Usando Bazaar (8)
●Si cometemos errores, Bazaar nos ayuda
$ rm micodigo.php (¡Uy!, lo borramos)
$ bzr revert micodig.php (¡Si!)
●Si añadimos 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)

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
Palabras finales
●Una de las herramientas clave para
manejar código, 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 múltiples plataformas, lo
que lo hace de utilidad universal.

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
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/

Jesús M. Castagnetto M., Ph.D. - Facultad de Ciencias y Filosofía, y
Dirección Universitaria de Información, Universidad Peruana Cayetano Heredia
¡Gracias!
¿Preguntas?
Jesús M. Castagnetto
[email protected]