Secciones

Primeras impresiones : DVCS Mercurial

Después del anuncio acerca de que Atlassian había comprado Bitbucket y de que este utiliza Mercurial como SCM (Source Code Management) he decidido investigar más sobre Mercurial, ya que Atlassian siempre ha demostrado tener muy buen ojo con los productos/empresas que ha comprado.

Distributed VCS vs Centralized VCS

Distributed revision control o Distributed Version Control Systems o Decentralized Version Control Systems es un sistema de control de versiones o revisiones de software que permite a cada uno de los desarrolladores trabajar en el código sin necesidad de estar conectado a un servidor central.

Las ventajas que ofrece un sistema distribuido DVCS frente a uno centralizado CVCS son:
  • No hay una copia canónica, existen referencias al código en las workings copies.
  • Soporta operaciones desconectadas: La mayoría de operaciones comunes como commits, viewing history, diff, y reverting changes son rápidas, porque no se necesita conexión con el sistema central.
  • Cada working copy es un backup.
  • Experimental branches – crear y eliminar branches es rápido y simple.
  • Fomenta la colaboración entre desarrolladores, permitiendo por ejemplo compartir cambios sin necesidad de commitearlos en el servidor central.




DVCS: Conceptos principales

Cuando utilizamos herramientas de versionado distribuido, debemos adaptarnos a una nueva filosofía de trabajo, en la que se requiere dominar algunos conceptos claves:
  • CVCS está centrado en sincronizar cambios de ficheros en un servidor central, mientras que DVCS tiene una orientación hacia compartir los cambios; de forma que cada cambio tiene un identificador único.
  • En un sistema DVCS registrar/descargar cambios y aplicarlos se realizan en pasos diferentes, en cambio en un sistema CVCS ocurren todos a la vez.
  • Un sistema DVCS no fuerza a utilizar una estructura común para todos.
  • El concepto push indica enviar un cambio a otro repositorio y el concepto pull indica almacenar en nuestro repositorio un cambio producido en otro.
¿Que es Mercurial?

Ahora que ya conocemos las conceptos básicos de un sistema DVCS, comenzamos a adentrarnos en Mercurial. Mercurial es un proyecto Open Source con licencia GPL, que nació en Abril del 2005 y cuyo creador es Matt Mackall al cual podéis seguir en twitter con el nombre de mpmselenic.

En el momento de escribir este post, la versión que se puede descargar es la 1.6.3 y parece que está apunto de liberarse la versión 1.6.4, y tiene versiones para Windows, Linux y Mac OS.

Su nickname es hg, debido a que es la abreviatura del mercurio, por lo que sus comandos comienzan todos por hg.

Una de las grandes virtudes que tiene frente a otros DVCS tales como Git o bazar, es que la mayoría de sus comandos son muy sencillos, aquí os dejo los más habituales:


hg init                   (create repo here)
hg add list.txt           (start tracking file)
hg commit -m "Added file" (check fie into local repo)
hg log                    (see history; notice guid)

hg revert list.txt        (revert to previous version)
hg tag v1.0               (tag this version)
hg update -C v1.0         ("update" to the older tagged version; 
                           -C forces overwrite of local copy)

Una vez creado un repositorio de mercurial, este está formado por:
  • Working copy. Los ficheros que estás editando actualmente.
  • Repository. Un directorio denominado .hg que contiene todos los ficheros, parches, metadatos, etc...

Updates y Merge

Es necesario distinguir entre update y merge. Los cambios que podemos hacer sobre un repositorio/working copy podrían ser:
  • obtener un cambio en el repositorio, (pushing o pulling)
  • aplicar un cambio a uno o varios ficheros (update o merge)
  • guardar un cambio  (commit)
Dependiendo del tipo de cambio, este puede provocar unupdate o un merge:
  • Los updates ocurren cuando no hay ambigüedad. Por ejemplo, se ha realizado un pull sobre un fichero que sólo tu has modificado.
  • Los merges son necesarios cuando hay algún conflicto con los cambios que estamos intentado realizar.

Mercurial vs Subversion

Creo que todo el mundo conoce Subversion, una herramienta de control de versiones populares, desarrollado para reemplazar CVS. Riene una arquitectura centralizada cliente/servidor, en cambio Mercurial es un sistema descentralizado.
 
Subversión y Mercurial tienen comandos similares para realizar las operaciones clásicas. Ambas herramientas son portátiles a todos los sistemas operativos más populares.
 

Antes de la versión 1.5, Subversion no ofrecía soporte útil a "merges". En la versión 1.6, se ha ampliado y añadido nuevas capacidades para gestionar merges, aunque es conocido por ser complicado y lleno de errores. Mercurial por contra, es un sistema pensado para trabajar con merges de forma nativa.

Mercurial tiene una ventaja sustancial en cuanto a rendimiento sobre Subversion ya que la gran mayoría de operaciones se pueden hacer en modo desconectado. En cambio la gran mayoría de comandos de Subversion necesitan conexión con el servidor y esto puede provocar cuellos de botella y hacer bastante molesto las operaciones habituales.


Herramientas Mercurial
Mercurial ofrece una gran cantidad de herramientas para trabajar con sus repositorios, aquí están algunas de las más destacables:
Aquí tenéis la la lista completa.


Más información y fuentes utilizadas para este post.

No hay comentarios:

Publicar un comentario