Escogiendo control de versiones (bzr, git, hg)

Es una elección difícil. Por suerte o por desgracia he usado los 3 últimamente, así que ahí van mis impresiones:

Bazaar

Empezaré por él porque es el que menos me ha gustado, y porque está muriendo, así que no lo recomendaría para proyectos nuevos.

Está muy bien que viene muy integrado con su GUI Bazaar Explorer, que si bien no es la mejor, es más intuitiva que la línea de comandos.

El principal problema que le he visto es que es muy lento al trabajar en red, al menos al usar Launchpad, que de por sí es la menos intuitivo de las plataformas online de desarrollo que he probado. También la metainformación de los repositorios tiende a ocupar más con Bazaar que con los demás.

Otro problema es que al iniciarte con él te da tantas opciones para organizarte las ramas de tu repositorio, que acabas mareándote… aunque a decir verdad esto pasa con todos al principio.

Git

Sin duda es el más popular de todos, aunque para mí ocupa el 2º puesto. Es el sistema que desarrolla y utiliza la Linux Foundation, con lo cual queda garantizada su eficiencia.

Es muy rápido, y tiene tantísimos comandos para tantísimas cosas que va a ser casi imposible que te falte uno para lo que necesitas. Lo malo es que de tanto que tiene se pasa, y para un principiante resulta algo abrumador, sobre todo teniendo en cuenta que te zambulles directamente en la línea de comandos, ya que no tiene una GUI libre multiplataforma decente (hay muchas, y trae una de serie, pero es horrible). Este es quizá el peor punto para mí. Con Bazaar y Mercurial puedes dejar para más tarde lo de la línea de comandos, si es que llegado el caso lo ves necesario.En parte se debe a que está escrito principalmente en C y Bash, lo cual ha hecho que su implementación en Windows haya sido algo complicada (de hecho es un proyecto aparte), y que algunas GUI hayan empezado por simplemente convertir los clicks de botones en comandos de consola, algo un tanto cutre si lo comparas con tener una buena biblioteca a la que llamar. Esto lo están arreglando con libgit2, pero de momento no llega al nivel de Git.Eso sí: tiene un fuerte enfoque en permitirte modificar el historial de cambios, y está presente en algunas plataformas de desarrollo fantásticas, como GitHub o Bitbucket.

Mercurial

Es mi preferido. Para empezar, en cuanto a eficiencia, cabe destacar que Facebook lo utiliza, y según dicen tienen un código más grande que el del propio núcleo de Linux, y han conseguido optimizarlo hasta niveles que Git les hubiera resultado muy difícil debido a su arquitectura. El resto de usuarios nos podemos beneficiar de los más de 500 parches que han contribuido. En definitiva, es rápido, compacto, escalable y extensible.

De hecho, su fuerte énfasis en su extensibilidad lo podemos notar al ver que viene de serie con una serie de plugins desactivados, que al activarlos nos proporcionan herramientas más avanzadas que lo que es el núcleo de funciones principales. Este enfoque me parece el mejor de los tres, ya que hace que la zambullida inicial sea menos dura, pero que no te quedes sin herramientas conforme te van saliendo necesidades más específicas. Por ejemplo, Mercurial no está muy a favor de modificar el historial, pero puede hacerse de diversas formas con extensiones, y ofrece otras alternativas como MQ.

Toda esta extensibilidad y multiplataformidad vienen en parte de haber elegido desde el principio un lenguaje como Python para escribirlo (con algunas extensiones en C), y ello permite lo que para mí es lo mejor de todo: TortoiseHg. Lo siento, me encanta la línea de comandos, pero esta GUI es sencillamente insuperable.

Reflexión final

La verdad es que, preferencias aparte, se trabaja bien con los tres. Si alguno te gusta más, úsalo y ponte a programar, y no te preocupes demasiado por las demás cosas.

2 comentarios en “Escogiendo control de versiones (bzr, git, hg)

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s