Réquiem para Bazaar

Después de haber trabajado por el suficiente tiempo con SVN (Subversion), descubrir Bazaar fue una verdadera revelación: tenía todas las ventajas de un sistema de control de versiones descentralizado, y a la vez podía implementar un flujo de trabajo tan sencillo como en SVN mientras aprendía las ventajas de trabajar de forma descentralizada. Por ello, convencer a mis compañeros de equipo de comenzar a utilizarlo fue una tarea relativamente sencilla: en la mayoría de los casos podíamos seguir trabajando del mismo modo en que estábamos acostumbrados, y ante necesidades más complejas bzr tenía las herramientas necesarias para hacerles frente.

Pero a medida que pasaba el tiempo, vimos cómo cada vez más personas hablaban de git, mientras que las únicas noticias que teníamos de Bazaar eran relacionadas con la detención de su desarrollo. Y cuando uno de sus principales desarrolladores le dedica un post de despedida, significa que ya es tiempo de dar vuelta la página. Sin embargo, éste no es ni por lejos el lamento por una batalla perdida: gracias a bazaar, pasar a utilizar flujos de trabajo descentralizados es una tarea mucho más sencilla, a la vez que pude comprender con mucha mayor claridad gran parte de los conceptos más abstractos necesarios para entender el funcionamiento de git.

Y aunque por culpa del estúpido y sensual GitHub probablemente nadie lo vaya a extrañar, aun creo que Bazaar hacía muchas cosas bien e incluso mejor que git, por ejemplo:

  1. Es más fácil implementar y utilizar distintos flujos de trabajo: están representados en su documentación oficial, y no es necesario hacer malabares ni grandes contorsiones para implementar algún flujo. Si bien es cierto que el flujo de trabajo de GitHub puede llegar a ser muy potente, cómodo y ordenado, al recién comenzar con git es difícil poder tener claridad en cuanto a las formas de trabajo más recomendadas.
  2. Tiene un verdadero registro de archivos renombrados: y esto refleja una de las principales diferencias en la forma en que funcionan ambos sistemas, ya que Bazaar trackea archivos y directorios mientras que git hace lo suyo con “contenidos”. Por lo tanto, al renombrar un archivo en Bazaar, la acción queda registrada en el commit correspondiente tal cual, mientras que git lo simula borrando el archivo antiguo y luego creando uno nuevo.
  3. Una noción más “natural” de la temporalidad: lo que una vez más refleja diferencias filosóficas en la concepción de ambos proyectos, ya que git, al apuntar a ser totalmente descentralizado, sólo utiliza hashes SHA1 como identificadores de commits, mientras que en Bazaar cada commit tiene (además de un hash, que por lo general no se muestra) un número de revisión. La diferencia fundamental viene al mezclar cambios de otra rama, ya que en git, los commits de la “otra” rama siguen teniendo identificadores SHA1, que ciertamente no indican orden ni jerarquía; mientras que en Bazaar, los cambios de la “otra” rama son incorporados a “mi” rama bajo un commit que tiene un número de versión lineal pero además jerarquizado (como 25.1, 25.2, 25.3.1, etc). Por lo tanto, mi rama siempre es la rama principal, o bien, al incorporarlos a una rama compartida o bendita (“blessed”), es posible identificar fácilmente qué cambios han sido mezclados desde otras ramas, y cuál es el desarrollo propio y pormenorizado de esa rama, sin agregar ruido a la historia general del proyecto.
  4. La gestión de conflictos es más sencilla ya que es parte de los comandos que son parte fundamental, y es que en muchos casos, simplemente sabemos que la versión “correcta” de tal o cual archivo es la propia o la otra, y en bazaar poder resolver este tipo de conflictos era cosa de ejecutar un comando y ya.
  5. La documentación es simple y clara, y no estoy diciendo que git no esté bien documentado ni mucho menos, sino que su problema es precisamente un exceso de documentación: algunos de sus comandos tienen tantas opciones, y se pueden mezclar de formas tan complejas, que en ocasiones es muy difícil llegar a una respuesta de forma directa. La verdad es que en muchos casos pareciera que utilizar git es magia negra, y sin Google estaríamos perdidos en poder encontrar las soluciones a problemas no-tan-poco-comunes; y a pesar que es un mérito de su comunidad poder registrar sus soluciones, es una debilidad de su documentación el tener que depender de las respuesta que otros entregan a las dudas en su utilización.

En definitiva, lo que más voy a extrañar de Bazaar es su interfaz, pero no me refiero a su interfaz gráfica sino a su interfaz de línea de comandos, ya que de un modo simple y sin complicaciones disponía de una herramienta flexible y poderosa. Realmente, se trata de un caso a estudiar, ya que se trata de un esfuerzo en el que evidentemente hay un diseño de interfaz muy cuidado en un lugar donde raramente solemos esperarlo.