Imagen/borrador-avatar.png

Esta sección es un esbozo en construcción. Se aprecian tus aportes y paciencia ;)

Bazaar: Un sistema de control de versiones distribuido hecho en python

Categorías: Debian | Sabayon/Gentoo

La Siguiente documentación es una adaptación del tutorial de Bazaar en ingles.

1. Introducción

Bazaar es un DRCS (Decentralized Revision Control Systems). A diferencia de otros sistemas de control de versiones, los cuales hacen el versionado contra un servidor central. Bazaar lo hace de forma distribuida. mas adelante explicaremos esto.

2. Instalación

2.1. En Debian

Esta instalación se hace en ubuntu 6.algo via apt.

Para instalar bazaar lo que debemos hacer es lo siguiente:

  1. Agregamos las siguientes fuentes a nuestro listado de fuentes de apt las cuales se encuentran en el archivo /etc/apt/sources.list
    •   deb http://bazaar-vcs.org/releases/debs/edgy ./
        deb-src http://bazaar-vcs.org/releases/debs/edgy ./
  2. Actualizamos nuestro caché de apt.
    •    $ apt-get update
  3. Buscamos los paquetes relacionados con Bazaar
    •    $ apt-cache search bzr
  4. Instalamos los paquetes necesarios.
    •    % apt-get install bzr 

2.2. En gentoo

Bazaar nos agrega un simple comando a nuestro listado de comandos que encontramos en el sistema el cual es bzr.

2.3. Clientes gráficos

Para los que ya han trabajado con Subversion (SVN) el manejo de Bazaar es muy similar a Subversion mas adelante se podrán dar cuenta.

Si eres de las personas que te gusta tener un entorno gráfico para el manejo de las herramientas. Tenemos diferentes posibilidades para ti. Una de ellas en Olive.

Olive es un GUI (Grafical User Interface) para Bazaar, es muy fácil de instalar y utilizar.

Para instalar Olive lo único que debes hacer es lo siguiente:

y para ejecutarlo

3. Introducción al manejo de Bazaar

Uno de los objetivos de un sistema de control de versiones es el seguirle la pista a el cambio de algo. En un sistema descentralizado como lo es Bazaar, requiere de un identificador por cada autor. Muchas personas ya utilizan un correo electrónico. Bazaar está en la capacidad de generar automáticamente correos electrónicos revisando tu nombre de usuario y nombre de host. Si no quieres que Bazaar adivine esto, tienes tres posibilidades para definir tu correo y nombre de usuario.

  1. Seleccionando una cuenta de correo via bzr whoami

    • /!\ Nota: Recordemos que el comando whoami retorna el nombre del usuario que ejecuta el comando.

    1. Para tomar un identificador global utilizamos el siguiente comando:
      •       $ bzr whoami "Your Name <email@example.com>"
    2. Si lo que usted quiere es tener diferentes identificaciones por ramas especificas lo que debe hacer es entrar al folder de la rama y ejecutar los siguiente:
      •      $ bzr whoami --branch "Your Name <email@example.com>"
  2. Configurando el correo electrónico en el archivo ~/.bazaar/bazaar.conf . esto lo podemos haces añadiendo las siguientes lineas:

    • /!\ Nota: Recuerde que [DEFAULT] es case sensitive, es decir hace distinciones entre mayúsculas y minúsculas

    •     [DEFAULT]
          email=Your Name <email@isp.com>
      o
           [/the/path/to/the/branch]
      email=Your Name <email@isp.com>
      En el archivo ~/.bazaar/location.conf
  3. Sobre-escribiendo las dos opciones anteriores.

3.1. Creando una rama

La historia de cambios se almacena por omisión en un directorio llamado .bzr el cual se encuentra en el directorio de la rama. Creamos una nueva rama la ejecutar le comando bzr init en el directorio donde sera ubicada.

A continuación podemos ver como luego de ejecutar el comando bzr init se genera una nueva carpeta la cual contendra el historial de esa rama:

3.2. Versionando Archivos

Al igual que con CVS, se tiene tres status de archivos: desconocido, ignorado y versionado. El comando Add convierte un archivo desconocido en uno versionado.

3.3. Eliminando archivos versionados

Para eliminar archivos ya versionados, es decir para retirar este archivo de la rama de versiones lo que debemos hacer es lo siguiente:

/!\ Nota: a diferencia de SVN este comando si elimina el archivo del disco. Si a eliminado un archivo o rama que no quería lo que debe hacer es lo siguiente:

3.4. Localización de ramas

Todo el historial de una rama se encuentra en cada directorio o rama, en un directorio llamado .bzr, este contiene archivos de control de Bazaar. Por omisión este es un repositorio o separado como es usado en SVN o SVk. usted puede seleccionar para crear un repositorio si lo necesita hacer (Ver el comando bzr init-repo)

3.5. Revisando los Cambios

Una ves hallas terminado algún trabajo, podrás enviar estos cambios al historial de cambios, hacer esto es una buena practica ya que siempre tendrás la versión actualizada de tu trabajo, si quieres hacer cambios, correcciones, etc. De esta forma podrás dividir en diferentes puntos en el tiempo la evolución de tu trabajo.

Dos comandos comúnmente utilizados para estas tareas son: status y diff

3.5.1. bzr status

El comando status te informa de que cambios han sido realizados en una rama o directorio de trabajo a partir de la ultima versión.

el comando status oculta en el informe los archivos que no tienen cambios o los que se definieron para ser omitidos.

3.5.2. bzr diff

el comando diff muestra todo el texto y sus diferencias de un archivo o conjunto de ellos en formato unificado diff.

cuando colocamos la opción -r el árbol es comparado con la ultima versión o entre diferentes versiones.

Esto nos mostraría las diferencias entre la versión 2 y la 4 de todo el árbol.

La opción --dif-options corre el programa externo diff pasandole opciones. Por ejemplo:

3.6. Enviando Cambios

Luego que el comando status sea satisfactorio, usted podrá enviar los cambios al repositorio y de esta forma crear un nuevo numero de versión, una instantánea de los archivos en este punto del tiempo.

El comando commit viene acompañado de un mensaje en el cual se describe los cambios hechos en el o los archivos. Este mensaje es digitado por el usuario y viene acompañado de la fecha, hora, id del usuario, inventario y contenido del árbol. el mensaje es especificado con la opción -m o --message. También puedes ingresar un comentario con múltiples lineas.

Puedes usar también la opción -F para tomar el mensaje desde un archivo, de esta forma puedes editar un archivo plano y que su contenido sea tomado como el comentario de la actualización del archivo. Cuando no definimos un archivo o un mensaje, bzr ejecuta el editor por omisión del sistema. Este lo podemos encontrar en la variable de entorno BZR_EDITOR.

Por omisión son actualizado todos los archivos y subdirectorios del árbol al menos que especifique el archivo o subdirectorio a actualizar.

3.7. Ignorando Archivos

En muchos árboles hay archivos que no necesitamos versionar como lo pueden ser archivos temporales, etc. Para que Bazaar ignore estos archivos, lo que debemos hacer es agregar un archivo llamado .bzrignore que contenga expresiones regulares en el nombre de los archivos que queremos que sean ignorados. Cada expresión debe ser definida en una linea distinta.

Cada directorio o rama puede contener su listado de archivos ignorados definidos en el archivo .bzrignore que se encuentra en cada rama, pero si quiere ignorar archivos globalmente lo puedes hacer editando el archivo ~/.bazaar/ignored. Por ejemplo:

En este caso no ignorará los archivos terminados en .tmp y ~ los cuales por lo general son archivos temporales.

Para ver que archivo han sido ignorados en una rama especifica lo que debemos hacer es ubicarnos en cada rama y ejecutar el comando ignored

3.8. Examinando el Historial

El comando log nos muestra un listado da lar revisiones previas. El comando log al igual que el comando diff antes mencionado soporta también la opción -r la cual tiene la misma función que en el comando diff.

3.9. Estadísticas de Ramas

El comando info nos muestra un resumen de los trabajos o actividad realizada en una rama.

3.10. Ramificando

Algunas veces cuando inicias tu propio proyecto, necesitas enviar tus cambios a un proyecto existente. Para hace resto tu necesitas traer un copia de la rama existente. Por que esta nueva copia es una potencial nueva rama del proyecto. Para esto utilizamos el comando branch.

Esta copia descarga el historial completo de de la rama, allí podemos hacer todas la acciones en esta copia local de la rama. también se tiene la opción de traer una parte de un historial si así lo deseas.

/!\ No entiendo muy bien el concepto

3.11. Siguiendo Cambios contracorriente (upstream)

Te puedes mantener actualizado con la rama padre trayendo adentro sus cambios:

Después de esos cambios, el directorio local puede ser un espejo (mirror) de la fuente. Esto incluye el historial de revision el cual es una lista de commits hechos en esta rama, mejor dicho la mezcla de otras ramas.

Este comando funciona solamente si tu rama local (destino)es, bien una copia de la rama padre sin nuevos commits de su propietario. o si el mas reciente commit en tu rama local a sido mezclada en la rama padre.

3.12. Mezclando con Ramas Relacionadas

Si dos ramas se han dividido (ambas tienen cambios únicos) entonces bzr merge es un comando apropiado para utilizar. fuzzy (El comando merge calcula los cambios existentes en la rama cuando tu estas mezclando las ramas intenta aplicar los cambios hechos en la tuya.)

Si se genera un conflicto mientras mezclas la ramas, tres archivos con la mismo nombre base son creados. El archivo con la base común es llamado con la extensión .BASE , el archivo con tus cambios es llamado con la extensión .THIS y el archivo con el cambio del otro árbol es llamado con la extensión .OTHER . Usando un programa llamado kdiff3 puedes mezclar estos dos archivos (.BASE y .OTHER) sobreescribiendo el archivo .THIS para luego renombrarlo como el archivo original y por ultimo resolviendo la versión. Por Ejemplo:

4. Publicando Tu Rama

No necesitas un servidor especial para publicar tu rama bzr, solamente un servidor Web normal. Precisamente refleja (mirror) tus archivos a tu servidor, incluyendo el directorio .bzr. Solamente puedes subir una rama (o los cambios de una rama) por uno de los siguientes métodos:

Tambien puedes hacer esto haciendo una copia manual via rsyn o por algún otro medio de copiado.

4.1. Moviendo Cambios Entre Árboles

Algunas veces haces cambios en el árbol equivocado. Algunas veces por que accidentalmente empezaste a trabajar en el árbol equivocado, tal ves por que estas trabajando de la misma manera, el cambio es mayor de lo que esperabas, por lo que necesitas una nueva rama para esto.

Para mover tus cambios de una rama a otra has esto:

5. Referencias

Otros CVS's

Bazaar (last edited 2008-04-20 14:37:59 by localhost)