Bazaar

Según el modelo que queremos seguir en el proyecto, puede haber un repositorio central en donde se almacena la más reciente (sigue siendo distribuido, pero eso no impide que podamos tener un servidor "central"). Los desarrolladores del proyecto vamos a poder escribir o publicar (push) directamente al servidor; a la versión oficial más reciente.

A continuación expongo mis anotaciones e impresiones sobre Bazaar.

Diagrama de uso

El siguiente diagrama tiene como objetivo servir de guía de cómo Bazaar permite distintos flujos de trabajo.

Notas

Flujo de trabajo

Como ya mencioné, Bazaar lo utilizo para un proyecto de código abierto en SourceForge; es decir, que manejamos un modelo mixto: distribuido con un servidor central oficial (de hecho, es justo lo que se muestra en la imágen). Entonces mi fluyo de trabajo es más o menos así:

  1. Hacer un branch del servidor central (bzr branch bzr+ssh miusuario@miproyecto.sourceforge.net/bzrroot/miproyecto)
  2. Modificar el código y probarlo
  3. Aceptar los cambios localmente:
    1. Revisar mis archivos modificados (bzr status) y ver diferencias (bzr diff)
    2. Aceptar mis cambios (bzr commit)
  4. Actualizar mis cambios en el servidor:
    1. Verificar que no haya cambios nuevos en el servidor (bzr merge seguido de bzr commit)
    2. Subir mis cambios (bzr push bzr+ssh miusuario@miproyecto.sourceforge.net/bzrroot/miproyecto)
  5. Si aún hay cambios pendientes, regresar al punto 2.

Vale la pena mencionar que en bzr hay 2 comandos muy similares: checkout y branch. Y aunque si hay una pequeña diferencia, supongo que prefiero usar branch (¿menos propenso a errores?).

Tips

Merge + Commit

Otra nota interesante es que después de hacer un merge (para traerse los cambios del servidor), debemos hacer un commit. Por ejemplo:

$ bzr commit -m "Merge from main branch"

Esto puede verse, por ejemplo, en los pasos (9) y (10) de la imágen arriba.

Recuperar un archivo borrado

Una de las cosas que ocasionalmente sucede, es borrar por error un archivo. Para ello usamos el comando revert. También se usa para regresar a un estado anterior de un archivo.

Diff Visual

Otra cosa útil que descubrí es que puedo hacer un:

    $ bzr diff --using kdiff3

.. y con eso, utiliza a kdiff3 para mostrar las diferencias. O mejor aún, usar kdiff3 por default. Para eso, hay que agregar lo siguiente en ~/.bazaar/bazaar.conf:

[ALIASES]
diff = diff --using kdiff3
external_merge = kdiff3

Repositorio default para push

La ruta del proyecto en SourceForge es algo complicada: bzr+ssh://miusuario@miproyecto.bzr.sourceforge.net/bzrroot/miproyecto .

Para no tener que escribir toda la ruta (que bzr recuerde el lugar predeterminado/default) podemos hacer:

$ bzr push --remember [location]

La misma opción (--remember) existe para pull y merge.

Merge vs. Pull vs. Update

Hay una pequeña diferencia entre merge, pull y update:

  • merge se usa cuando hay cambios locales.
  • pull se usa para traer una versión completa/estable.
  • update se usa cuando el código se obtuvo con checkout (puede verse como un merge + commit del repositorio predeterminado).

Pero todo parece indicar que en caso de haber obtenido el código con checkout, no debemos usar push; sólo update.

Links relacionados