Jugando con Bazaar

Hace algunos meses descubrí Git y empecé a oir hablar de los sistemas de control de versiones distribuidos. Me quedé con las ganas de echarle un ojo con más calma y ver qué era exactamente eso, qué ventajas aporta y si merece la pena usarlo. Sin embargo, me echaba atrás el que Git sólo estuviera disponible para linux. Para windows había que usar cygwin o bien con cosas como msysgit.

Gracias a un comentario del post anterior, descubro Bazaar, con soporte para linux y windows, con una documentación bastante agradable y sobre todo, con fama de ser fácil de usar. Así que me puse a jugar con ello.

La instalación en Windows muy sencilla con el instalador. En Ubuntu con el gestor de paquetes synaptic también (eso sí, hay que buscar "bzr" que es el comando de línea de comandos para Bazaar (como cvs, o svn en CVS o Subversion).

Cogí uno de los proyectos que tengo en Java y cree el primer proyecto con Bazaar. Fue realmente sencillo, basta con situarse en el directorio del proyecto ya creado y ejecutar los comandos

$ cd /home/chuidiang/PROYECTO
$ bzr init
$ bzr add
$ bzr commit -m"Primera version"

Todo fue de perlas. Sin necesidad de instalar ningún servidor ni nada parecido ya tengo mi primer proyecto (ya existente previamente) bajo el control de versiones de Bazaar.

Me voy ahora a otro directorio y pruebo a "sacarlo". También es sencillo

$ cd /tmp
$ bzr branch /home/chuidiang/PROYECTO RAMA_PROYECTO

Y ya tengo mi copia de trabajo en /tmp.

Aquí empieza, además, la primera diferencia con un sistema de control de versiones normal. Si hubiese ejecutado el comando bzr checkout en vez de bzr branch, habría extraido en /tmp el proyecto de forma similar a CVS o SVN. Cualquier commit que hiciese, se haría directamente en /home/chuidiang/PROYECTO, como si fuese el servidor o repositorio central. Sin embargo, al hacerlo con bzr branch, tengo ahora en /tmp una copia completa e indpendiente del proyecto original en /home/chuidiang/PROYECTO. Puede hacer commits independientes en un lado y en otro, cada uno con su propia historia y sus propios comentarios.

Sin embargo, tenemos más comandos de Bazaar, como bzr push, bzr pull, bzr merge, etc que permiten tanto a uno como a otro, traerse los cambios hechos en el otro proyecto, o bien llevarse tus propios cambios al otro proyecto.

Con un sistema de control de versiones distribuido tenemos libertad de organizar los repositorios del proyecto como queramos. Podemos o no poner un repositorio central y los desarrolladores pueden llevar sus propias ramas, intercambiarse unos con otros los fuentes antes de llevarlos al repositorio central y cualquier combinación que se nos ocurra.

Por ejemplo, suele ser buena idea tener un repositorio central donde esté la última versión en condiciones del proyecto. Los desarrolladores, con bzr branch se hacen sus propias copias y repositorios locales. Tocan, prueban y hacen commits locales todas las veces que quieran, conservando toda la historia de sus ficheros. Cuando todo está en condiciones, llevan su copia local al repositorio central, donde se actualizará con toda la historia local del desarrollador.

Es más, dos desarrolladores trabajando en una funcionalidad común, pueden actualizarse sus repositorios locales de uno a otro todas las veces que haga falta. Cuando sus copias locales estén en condiciones, las pueden subir al repositorio central. Se evita así, que estos desarrolladores tengan que compartir código todavía no probado subiéndolo previamente al repositorio central.

En fin, una pequeña maravilla, abierta a tantas posiblidades como seamos capaces de imaginar.

Entradas relacionadas:

Esta entrada ha sido publicada en Herramientas y etiquetada como , . Guarda el enlace permanente.

7 respuestas a Jugando con Bazaar

  1. eznibe dijo:

    no me queda clara cual es la ventaja entre un branch con bazaar y uno con svn por ejemplo, esto de que dos personas puedan hacer modificaciones sobre un repositorio auxiliar y luego mergear al base es algo que se puede hacer tambien con svn no?, hay algo en lo de distribuido que no me queda del todo claro

    saludos

  2. Chuidiang dijo:

    Hola:

    Realmente no hay nada que se pueda hacer con uno que no se pueda hacer con otro. Con svn se podría crear una rama para que ambos desarrolladores trabajen y luego hagan el merge con la principal. Con un entorno distribuido, cada desarrollador tiene su propia rama local, que NO está en el respositorio central. Ellos pueden hacer «merge» de sus ramas tantas veces como quieran sin tocar para nada el repositorio central y cuando hayan terminado, se junta todo en el repositorio principal. En ambos casos es muy similar y la única diferencia es si la rama está o no en el repositorio central.

    Una ventaja de Bazaar es que en las ramas locales se pueden meter varias veces un mismo fichero cada vez con un comentario distinto y luego, al hacer el merge al repositorio central, se conservan todos los comentarios parciales. Por ejemplo, si el fichero está en versión 4, un desarrollador lo toca en su rama y lo mete varias veces con «comentario 1», «comentario 2», «comentario 3», al hacer el merge en el repositorio principal, este fichero pasa a version 5 con un comentario «añadida funcionalidad». Si ahora miramos el bzr log de este fichero, veremos (más o menos)

    version 5 : «añadida funcionalidad»
    version 4.1.3 : «comentario 3»
    version 4.1.2 : «comentario 2»
    version 4.1.1 : «comentario 1»
    version 4 : «inicial»

    Se bueno.

  3. marcosjvc dijo:

    Asi es, muy interesante este Bazaar, yo tambien lo comence a probar despues de que lei el comentario del post anterior. Busque una tabla de comparativas (que en realidad no se que tan fiables sean, aunque quien la haga sabe mas que yo sobre el tema, eso es seguro), y de entre las «gratis», Bazaar era la herramienta que abarcaba mas caracteristicas.

    Saludos

  4. Rodrigo dijo:

    Me dicen por aquí que MERCURIAL es mejor que BAZAAR

    http://www.selenic.com/mercurial/wiki/

  5. marcosjvc dijo:

    mmm yo vi este:

    http://en.wikipedia.org/wiki/Comparison_of_revision_control_software

    PD: Si el comentario aparece duplicado es por que he tenido problemas con la pagina.

  6. Chuidiang dijo:

    Hola Blaxter. Está interesante el gitcasts, gracias.

    Se bueno.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.