Hace relativamente poco tiempo que he empezado a utilizar Bazaar como sistema de control de versiones en lugar de CVS, tal y como lo mencione en este otro post , y con la reciente noticia de que bazaar se ha convertido en un proyecto GNU creo que vale la pena aprovechar para escribir algo en el blog hablar un poco sobre mis impresiones con el sistema.
Llevo ya casi un año de haber empezado a trabajar con los sistemas de control de versiones, desde que empecé a travesear en Sourceforge . Al principio no tenía idea de como funcionaban y tuve que pasar un par de días leyendo al respecto, y para bien o para mal, empecé con CVS. Me costo bastante adaptarme, habían muchas cosas que no eran intuitivas y cometí muchos errores, incluso varios meses después de haber empezado a usarlo.
Consideré la posibilidad de cambiarme a Subversion , pero las diferencias no me parecieron significativas como para eso. La primera vez que escuche sobre Bazaar me pareció que era solamente un sistema de control más que andaba por ahí, pero ya viéndolo con detenimiento me di cuenta que éste si aporta muchas cosas interesantes.
Creo que una de las cosas que más me gusto de Bazaar en un comienzo es que cada revisión guarda una copia de todos los archivos, estén modificados o no. CVS solía tratar cada archivo individualmente, y si no marcabas explícitamente que todos estaban relacionados, era imposible saber que revisión de X archivo era compatible con otro archivo Y. Sien embargo, esta no es la característica más importante de Bazaar y, si no me equivoco, Subversion también funciona de esta manera.
En donde se encuentra realmente el potencial de Bazaar es en su manejo de ramas o branchs. CVS y Subversion tienen sus maneras de utilizar ramas, pero siempre me pareció que crear una rama era una decisión muy importante que no se debía tomar a la ligera. Con Bazaar, las ramas son la forma ordinaria de trabajar, permitiendo e incluso fomentando a que cada desarrollador trabaje en su propia rama, e incluso tenga varias ramas a su disposición.
El orden dentro de un proyecto es probablemente el factor más importante para que este siga creciendo. La experimentación también es importante, un proyecto que deja de probar cosas nuevas esta condenado a desaparecer. Bazaar permite combinar las dos cosas, un desarrollador puede tener su propia rama experimental, en la que puede hacer y deshacer a su antojo con todas las ventajas de un VCS ordinario, como tener distintas revisiones, sin contaminar la rama principal de desarrollo que debe de mantenerse impecable.
La mezcla entre las ramas es un proceso muy delicado, no queremos que el trabajo de otros se pierda por un error de compatibilidad, y tampoco queremos perder la línea de los cambios que se han realizado. Bazaar trata de hacer este proceso lo más sencillo posible y lleva un control bastante estricto de las ramas que se han mezclado y los aportes que se han incluído. Hay muchos conflictos que siempre necesitarán asistencia humana para resolverse, pero hay que recordar que el software es una herramienta y no debe servir para hacer el trabajo en nuestro lugar.
Por el momento estoy bastante contento con este sistema de control de versiones, junto con el sistema de blueprints de Launchpad , me ha ayudado mucho con la organización y el avance de MoonDragon . Espero que Bazaar siempre siga mejorando, personalmente espero el día en el que su plugin para Eclipse sea estable y completamente funcional.