Mercurial
Mercurial es una herramienta de control de revisiones distribuida para desarrolladores de software. Es compatible con Microsoft Windows, Linux y otros sistemas similares a Unix, como FreeBSD y macOS.
Los principales objetivos de diseño de Mercurial incluyen alto rendimiento y escalabilidad, descentralización, desarrollo colaborativo totalmente distribuido, manejo sólido de archivos binarios y de texto plano, y capacidades avanzadas de ramificación y fusión, sin dejar de ser conceptualmente simple. Incluye una interfaz web integrada. Mercurial también ha tomado medidas para facilitar la transición para los usuarios de otros sistemas de control de versiones, particularmente Subversion. Mercurial es principalmente un programa controlado por línea de comandos, pero hay disponibles extensiones de interfaz gráfica de usuario, p. TortoiseHg y varios IDE ofrecen soporte para el control de versiones con Mercurial. Todas las operaciones de Mercurial se invocan como argumentos para su programa controlador hg
(una referencia a Hg, el símbolo químico del elemento mercurio).
Olivia Mackall creó Mercurial y fue su desarrolladora principal hasta finales de 2016. Mercurial se lanza como software gratuito bajo la licencia GPL-2.0 o posterior. Se implementa principalmente utilizando el lenguaje de programación Python, pero incluye una implementación de diferencias binarias escrita en C.
Historia
Mackall anunció Mercurial por primera vez el 19 de abril de 2005. El impulso para esto fue el anuncio a principios de ese mes por parte de Bitmover de que iban a retirar la versión gratuita de BitKeeper debido al desarrollo de SourcePuller.
BitKeeper se había utilizado para los requisitos de control de versiones del proyecto del kernel de Linux. Mackall decidió escribir un sistema de control de versiones distribuido como reemplazo para su uso con el kernel de Linux. Este proyecto comenzó unos días después de que Linus Torvalds iniciara el ahora conocido proyecto Git con objetivos similares.
El proyecto del kernel de Linux decidió utilizar Git en lugar de Mercurial, pero ahora muchos otros proyectos utilizan Mercurial (ver más abajo).
En una respuesta a la lista de correo de Mercurial, Olivia Mackall explicó cómo el nombre "Mercurial" fue elegido:
Poco antes de la primera versión, leí un artículo sobre el debacle de Bitkeeper en curso que describió a Larry McVoy como mercurial (en el sentido de 'fickle'). Dados los múltiples significados, la abreviatura conveniente, y el buen ajuste con mi esquema de nominación preexistente (ver mi dirección de correo electrónico), hizo clic al instante. Mercurial es así nombrado en honor de Larry. No sé si lo mismo es cierto de Git.
Proyectos de alto perfil como OpenJDK han utilizado Mercurial en el pasado, aunque OpenJDK ya no lo hace a partir de Java 16.
Diseño
Mercurial utiliza hashes SHA-1 para identificar revisiones. Para el acceso al repositorio a través de una red, Mercurial utiliza un protocolo basado en HTTP que busca reducir las solicitudes de ida y vuelta, las nuevas conexiones y los datos transferidos. Mercurial también puede funcionar a través de SSH, donde el protocolo es muy similar al protocolo basado en HTTP. De forma predeterminada, utiliza una combinación de tres vías antes de llamar a herramientas de combinación externas.
Uso
La Figura 1 muestra algunas de las operaciones más importantes de Mercurial y sus relaciones con los conceptos de Mercurial.

Adopción
Aunque Mercurial no fue seleccionado para administrar las fuentes del kernel de Linux, ha sido adoptado por varias organizaciones, incluidas Facebook, W3C y Mozilla. Facebook está utilizando el lenguaje de programación Rust para escribir Mononoke, un servidor Mercurial diseñado específicamente para admitir grandes repositorios de proyectos múltiples.
En 2013, Facebook adoptó Mercurial y comenzó a trabajar para ampliarlo para manejar su gran repositorio de código unificado.
Google también utiliza el cliente Mercurial como interfaz en su plataforma 'Piper' back-end de monorepo.
Bitbucket anunció que sus servicios de control de versiones basados en web dejarían de admitir Mercurial en junio de 2020 (luego lo ampliarían hasta julio de 2020), y explicó que "menos del 1 % de los nuevos proyectos lo utilizan, y las encuestas a desarrolladores indicaron que El 90% de los desarrolladores utilizan Git".
Servidores Mercurial y gestión de repositorios
- Heptapod, un tenedor GitLab para Mercurial por Octobus
- Kallithea, un tenedor GPLv3 de RhodeCode
- Kiln by Fog Creek Software
- Phabricator by Phacility
- RhodeCode por RhodeCode Inc.
Alojamiento de código fuente
Los siguientes sitios web proporcionan alojamiento gratuito de código fuente para repositorios Mercurial:
- Bitbucket de Atlassian (deprecido de febrero de 2020; sólo lectura desde julio de 2020)
- Codebase
- FusionForge
- GNU Savannah por FSF
- Heptapod
- Mozdev
- OSDN
- Otros
- Perforce
- Puszcza (sitio hermana de GNU Savannah, hospedado en Ucrania)
- SourceForge
- Fuente Hut
- TuxFamily
Proyectos de código abierto utilizando Mercurial
Algunos proyectos que utilizan el RCS distribuido de Mercurial:
- GNU Health
- GNU Multi-Precision Library
- GNU Octave
- LEMON
- LiquidFeedback
- Mozilla (también utiliza Git/GitHub)
- Nginx
- Ortanoc
- Pidgin
- RhodeCode
- Roundup
- Tryton
- WinDirStat
- wmii
- XEmacs
- Xine
- eric