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.
El siguiente diagrama tiene como objetivo servir de guía de cómo Bazaar permite distintos flujos 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í:
bzr branch bzr+ssh miusuario@miproyecto.sourceforge.net/bzrroot/miproyecto
)bzr status
) y ver diferencias (bzr diff
)bzr commit
)bzr merge
seguido de bzr commit
)bzr push bzr+ssh miusuario@miproyecto.sourceforge.net/bzrroot/miproyecto
)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?).
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.
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
.