Bazaar la herramienta para el control de versiones de forma distribuida
1. Bazaar la herramienta para
el control de versiones de
forma distribuida
Un sistema de control de versiones es el encargado de la gestión de los diversos
cambios que se realizan sobre los elementos dentro el desarrollo de un producto
software o en las configuraciones del mismo.
Llevar un historial de los cambios
✔
en cada elemento del proyecto y
anotar el autor de los cambios. Cada
uno de los cambios se denomina
revisión.
Posibilidad de añadir, borrar, mover
✔
o editar los elementos.
Capacidad de gestionar ramas de
Introducción ✔
desarrollo paralelas a la principal.
Los sistemas de control de versiones , en la
Gestión de conflictos, en el caso de
✔
actualidad se han convertido en un elemento
que más de un usuario cambie un
indispensable en el proceso de desarrollo de
elemento del proyecto.
un producto software; de igual forma se
Generación de informes de estado,
convierten en un aliado importante de la ✔
donde se muestren las diferencias
ingeniería de software en la tarea de
entre distintas revisiones.
conseguir como resultado un producto de
software de calidad.
Clasificación
Los sistemas de control de versiones desde
sus inicios fueron utilizados principalmente en
Centralizados: existe un repositorio
la industria informática, pero hoy en día estos ✔
centralizado de todo el código, del
sistemas son utilizados tanto por industrias
cual es responsable un único usuario
como por desarrolladores individuales,
(o conjunto de ellos). Se facilitan las
considerando que estos últimos le dieron
tareas administrativas a cambio de
más dinamismo a su desarrollo y evolución.
reducir la potencia y flexibilidad, pues
Los sistemas de control de versiones se todas las decisiones fuertes (como
constituyen en un buen complemento a los crear una nueva rama) necesitan la
sistemas de backups. aprobación del responsable.
Distribuidos: se aumenta la
✔
Características de un capacidad de decisión distribuida,
característica que dará mayor
sistema de control de flexibilidad en el uso, pero en algunos
versiones casos puede dificultar la
sincronización.
Gestionar el almacenamiento de
✔
cada uno de los elementos del ✔
proyecto.
2. Módulo: Conjunto de directorios y/o
Funcionamiento ✔
archivos dentro del repositorio que
Todos los sistemas de control de versiones pertenecen a un proyecto común.
se basan en disponer de un repositorio, que
Rótulo: Identificador asignado a un
✔
es el conjunto de información gestionada por
módulo o fichero, asignado en un
el sistema. Este repositorio contiene el
momento determinado, orientado a
historial de versiones de todos los elementos
una búsqueda posterior.
gestionados.
Revisión: Una revisión es una versión
✔
Cada uno de los usuarios puede crearse una
determinada de un archivo.
copia local duplicando el contenido del
repositorio para permitir su uso. Es posible Línea base: Una revisión aprobada
✔
duplicar la última versión o cualquier versión de un fichero, a partir del cual se
almacenada en el historial. Este proceso se pueden realizar cambios
suele conocer como check out. subsiguientes.
Al momento de realizar modificaciones en la Injertar rama o branch: Un módulo
✔
copia local existen dos alternativas: puede ser branched o bifurcado en un
momento dado, de forma que, en
Exclusivos: para poder realizar un
✔
adelante, dos copias de esos ficheros
cambio es necesario marcar en el
puedan ser desarrolladas a diferentes
repositorio el elemento que se desea
velocidades o de diferentes formas,
modificar y el sistema se encargará
de modo independiente.
de impedir que otro usuario pueda
modificar dicho elemento. Check-out: Permite crear una copia
✔
de trabajo local desde el repositorio.
Colaborativos: en el que cada
✔
Se puede especificar una revisión
usuario se descarga la copia, la
específica, por defecto se suele
modifíca y el sistema
obtener la última.
automáticamente mezcla las diversas
modificaciones. El principal problema Commit o check-in: Los cambios
✔
es la posible aparición de conflictos realizados localmente son escritos o
que deban ser solucionados integrados sobre el repositorio.
manualmente o las posibles
Conflicto: Un conflicto ocurre cuando
✔
inconsistencias que surjan al
el sistema es incapaz de fusionar los
modificar el mismo fichero por varias
cambios, algunas veces precisa
personas no coordinadas. Esta
intervención manual.
semántica no es apropiada para
Cambio: Un cambio representa una
ficheros binarios. ✔
modificación específica a un fichero
Tras realizar la modificación es necesario
bajo control de versiones.
actualizar el repositorio con los cambios
Lista de cambios: Son listas que
realizados. Habitualmente este proceso se ✔
identifican una serie de cambios a
denomina commit, check in.
realizarse en un solo commit. Útil al
momento de revisar un cambio a
Conceptos a considerar al partir de un identificador.
momento de utilizar un Exportación: Similar a un check-out,
✔
control de versiones crea un árbol de directorios limpio sin
los metadatos de control de versiones
Repositorio: Es el lugar en el que se presentes en la copia de trabajo. Se
✔
almacenan los datos actualizados e utiliza a menudo de forma previa a la
históricos, a menudo un servidor publicación de los contenidos.
(proceso centralizado), el PC de los
Importación: Una importación es la
✔
desarrolladores (proceso distribuido)
acción de copia un árbol de
3. directorios local (que no es en ese Amigable: Orientado principalmente a
✔
momento una copia de trabajo) en el personas que recién empiezan a
repositorio por primera vez. hacer uso de este tipo de
herramientas, enfocado
Integración o fusión: Una
✔
principalmente a la usabilidad y
integración o fusión une dos conjuntos
eficiencia.
de cambios sobre un fichero o un
conjunto de ficheros en una revisión Elegante: Soporta el renombrado de
✔
unificada de dicho fichero o ficheros. archivos y directorios
Actualización: Integra los cambios Rápido: Permite obtener rápidamente
✔ ✔
que han sido hechos en el repositorio sus ventajas y características sin
(por ejemplo por otras personas) en la afectar al proceso de desarrollo.
copia de trabajo local.
Eficiente: Su almacenaje utiliza un
✔
Copia de trabajo: La copia obtenida formato altamente eficiente y limpio.
✔
desde el repositorio en el área de
Ligero: No precisa tener un servidor
✔
trabajo local, se la realiza en un
dedicado
momento del tiempo o revisión
Extensible: Posee una arquitectura
específica ✔
basada en plugins, aspecto que
Congelar: Representa permitir los
✔
permite dotarle de mayores
últimos cambios (commits) para
características especificas y acorde a
solucionar las fallas a resolver en una
cada necesidad.
entrega (release) y suspender
Embebido: Característica que le
cualquier otro cambio antes de una ✔
permite estar presente en una serie
liberación, con el fin de obtener una
de aplicaciones y servicios libres y/o
versión consistente.
comerciales.
Seguro: Al margen de las
Qué es Bazaar? ✔
características que posee por si
Bazaar es un sistema de control de mismo, cuenta con el patrocinio de
versiones distribuido, de origen open source. Canonical tanto para su desarrollo
como para su suporte
Libre: Disponible bajo licencia GPL.
✔
Beneficios de un sistema de
control de versiones
distribuido
Trabajo personal
Posibilidad de revertir una revisión
✔
previa
Facilitar la revisión de nuestro propio
✔
código (antes del commit)
Por qué Bazaar? Sincronización de múltiples maquinas
✔
Adaptable: Orientado a la mayoría de
✔
los trabajos de desarrollo de software
(local y/o remoto).
4. Desarrollo colaborativo Poniendo a prueba a Bazaar
Un desarrollador puede trabajar sin Para lograr un mejor entendimiento, de todas
✔
interferir con el trabajo de otros las características y funcionalidades que
desarrolladores dispone Bazaar, basaremos nuestro ejemplo
considerando el siguiente directorio y
El proceso de fusión es automatizado
✔
contenido:
en su generalidad.
Instalación
✔
Que precisamos
Bazaar es un software que puede ser
instalado en varias plataformas mediantes
sus respectivos gestores de paquetes:
Debian, Ubuntu (apt-get)
✔
RHEL, CentOS, Fedora (yum)
✔
Windows, posee un isntalador
✔
Mac OS X (MacPorts).
✔
Identificación Inicial
Antes de comenzar a trabajar es recomendable identificarse, haciendo conocer nuestro nombre
y email:
Verificación de Identificación
Esto permitirá modificar el archivo de
configuración, modificación que puede ser
verificada de la siguiente forma:
Esto ha hecho que Bazaar cree un branch
donde almacenará los ficheros y el histórico
de revisión de los mismos. (crea un directorio
oculto con una serie de subdirectorios y
Inicializar el control de archivos que le permiten mantener el control
versiones y registro de archivos y tareas realizadas, el
contenido es mostrado en la figura siguiente)
Inicializamos el control de versiones de
nuestro directorio
5. Deshacer cambios
Esta característica puede darse en tres casos
distintos:
Desversionando un archivo
Deshacer el último commit
Poniendo ficheros bajo el
control de versiones
Ahora es momento de ir añadiendo los
ficheros y directorios de los cuales queremos
Deshacer todos los cambios
mantener un control de versiones.
desde el ultimo commit:
El deshacer los cambios pueden ser globales
o de forma especifica de algún archivo.
Registrando los cambios
Realizando cambios en
Bazaar nos permite realizar este registro
nuestros archivos
tanto a nivel global (todo el árbol de
directorios) como a nivel especifico (solo Ahora procederemos a realizar algunos
ficheros determinados) cambios en alguno de nuestros archivos
(cuadrado.py) y verificar las diferencias con la
versión registrada.
6. Visualizando el estado de
archivos
Visualizando el historial de
revisiones
Una vez que los cambios se hayan realizado
podemos proceder a registrar el cambio en
nuestro branch mediante un commit, es
recomendable incluir un mensaje descriptivo
en cada commit.
Publicando el branch con sftp
Precisamos tener instalado y configurado un servidor SFTP, que servirá como plataforma de
publicación. Asumiremos que nuestro branch será publicado en
http://proyecto.dominio.com/repositorio:
Esto hace que Bazaar cree el directorio repositorio y dentro de el coloque el branch de nuestro
proyecto.
7. Creando una nueva rama (branch)
Muchas veces es necesario trabajar sobre ramas publicadas por otros desarrolladores; para
esto podemos traer una copia de la publicación que hicimos anteriormente y crear una nueva
rama dentro nuestro proyecto.
Combinando ramas
Dentro del desarrollo podemos contar con varias ramas, cada una con ciertas modificaciones;
en caso que quisiéramos combinar nuestra copia de trabajo con una rama en especial,
podemos hacer un merge de la siguiente forma.
En caso de desear registrar estos cambios en nuestro repositorio local deberemos hacer un
commit.
Distribuir nuestros proyectos
Antes de empezar a distribuir los archivos de nuestro desarrollo, podemos etiquetarlos para
mantenerlo en el registro y posteriormente empaquetarlos.
Etiquetado
Empaquetado
8. GUIs de ayuda Ganotate
Bazaar dispone de una serie de GUIs que
permiten realizar varias de la tareas de forma
gráfica.
Gbranch
Gcommit
Gdiff
Visualize Referencias
[1] http://bazaar-vcs.org/
[2] http://bazaar-vcs.org/Documentation
Autor
Anotate
Esteban Saavedra López
Líder de la Comunidad ATIX (Oruro – Bolivia)
Activista de Software Libre en Bolivia
jesaavedra@opentelematics.org
http://jesaavedra.opentelematics.org