miércoles, noviembre 21, 2007

Mercurial

Hace un tiempo que vengo usando subversion para matener los proysctos propios (siempre regañé de la incomodidad del setup para el uso personal) y la necesidad de cierta disciplina a la hora de hacer commit. Yo soy un programador de rachas, es decir, existen momentos creativos, y momentos de crítica. Generalmente, cuando me ilumino, hago un commit como medida preventiva si rompo todo :S (para que voy a branchear si estoy trabajando solo). Cuando hago lo mismo trabajando en grupo, es decir ser commit friendly... a veces, se entretejen mis commits, con los de otro programador con su "racha creativa", y se llega a un estado que se puede describir con estas palabras: "perá, no hagas commit", "dale, dale, ahora hacé commit", y cosas así...
Comencé a probar otros mecanismos de control de versiones. Probé Svk y Darcs, Bazaar(muy superficialmente, me parecía que estaba demaciado enfocado al desarrollo de Ubuntu) y finalmente encontré algo sencillo, su nombre es mercurial (aka hg). Sinceramente, no fue por el tema de nuestro proceso caótico de desarrollo, sino por que la máquina donde teníamos nuestro server de svn con apache, estaba alejada geográficamente, y nos conectabamos por vpn, y a veces el enlace no funcionaba.

La documentación oficial es corta, sin embargo suficiente.
La principal diferencia entre un sistema de control distribuido, es que uno hace los commits contra su propio repositorio, luego hace push o pull de sus cambios, hacia o desde otro repositorio respectivamente.
Cada copiad de trabajo, es una rama. Si usamos repositorio central, convergerán en el producto final, pero mientras tanto, podemos mantener localmente las versiones. Debido ha esto aumenta la posibilidad de hacer el merge un poco más caótico, pero creo que estar consiente de esto. Si sospecho que alguien en mi equipo de trabajo puede estar introduciendo cambios que pueden hacer que mi merge contra el repo central sea una odisea, puedo hacer un pull del repo de esta persona y ver como remediar el problema.

El setup para http es bastante sencillo, corre como cgi, es cuestion de una regla para mod_rewrite y un location si queremos tener login.
Otra coasa que no probé pero sonó muy bien, es que es plugineable.

Bien, como se usa?
Primero lo instalamos, apt-get install mercurial, emerge mercurial o yum install mercurial (según usemos Debian/Ubuntu, Gentoo o Fedora).
Para crear el repo, en una carpeta:
$ hg init
ahora, si lo que queremos es hacer un "checkout", sería algo como
$ hg clone http://repo # También podemos enviar los cambios por mail o por ssh
cuando queremos hacer commit (muy similar a svn)
$ hg commit
los rollbacks
$ hg rollback
para enviar los cambios
$ hg push
y para traerlos
$ hg pull
Toda la configuración está en la carpeta oculta .hg en el archivo hgrc (.hg/hgrc)
Los archivos que queremos hacer pasar por lato, los ponemos en un .hgignore en el root del proyecto.
Para servir el proyecto por http, adivinen, hg serve, jeje, para quienes usaron subversion la sintaxis es muy similar en muchos comandos, y para quienes no, creo que es bastante sencillo.

Tiene un plugin para trac, que todavía no probé, pero también es otra feature.

No hay comentarios.: