Mercurial | |
---|---|
Tipo de | sistema de control de versiones distribuido [d] |
Desarrollador | Matt Mackall |
Escrito en | Python , C y Rust |
Sistema operativo | multiplataforma |
Primera edición | 19 de abril de 2005 [1] |
ultima versión |
|
Licencia | GNU GPL 2+ [4] |
Sitio web | mercurial-scm.org |
Archivos multimedia en Wikimedia Commons |
Mercurial (del inglés - "mercury, mobile"), también conocido como Hg (de la designación del elemento químico mercurio ) es un sistema de control de versiones distribuido multiplataforma diseñado para trabajar de manera eficiente con repositorios de código muy grandes. En primer lugar, es un programa de consola .
Mercurial surgió del mismo conflicto que condujo a la creación de Git . El autor del nuevo sistema fue Matt Mackall .
El sistema de Mercurial está escrito en Python , aunque las partes sensibles al rendimiento (como su propia implementación de diff ) se implementan como módulos de extensión en C [5] . Rust también se utiliza para mejorar el rendimiento . [6] Mercurial se escribió originalmente para Linux , luego se trasladó a Windows , Mac OS X y la mayoría de los sistemas Unix . Los repositorios de Mercurial se administran con una utilidad de línea de comandos hg, pero también hay GUI.
Junto con las funciones tradicionales de los sistemas de control de versiones, Mercurial admite el trabajo completamente descentralizado (no existe un concepto del repositorio de código principal), la ramificación (es posible mantener varias ramas de un proyecto y copiar cambios entre ramas), la fusión de repositorios (que logra la “distribución” del trabajo). Admite la comunicación entre repositorios a través de HTTP / HTTPS , SSH y manualmente mediante conjuntos de cambios empaquetados.
La utilidad hgtiene una interfaz compacta y se considera que Mercurial es más fácil de aprender que, por ejemplo, git [7] .
Mercurial es un sistema de control de versiones distribuido (descentralizado). Esto significa que el flujo de trabajo normalmente se ve así:
Es decir, todo el trabajo diario se lleva a cabo en el repositorio local y, cuando surge la necesidad, los resultados de su trabajo se envían a uno o más repositorios. Puede reducir la cantidad de pasos cuando trabaja con repositorios remotos configurando Mercurial para enviar cambios automáticamente a otros repositorios cuando se realiza una confirmación [8] .
El programa de la consola se implementa de tal manera que el nombre de cualquier comando se puede abreviar siempre que su nombre no sea ambiguo. Además, algunos comandos tienen alias. hg commitPor ejemplo, puede escribir hg commi, hg commo en su lugar hg com, pero si escribe hg c, entonces Mercurial se negará a ejecutar este comando, diciendo que " el comando 'c' es ambiguo " y brindando una lista de comandos que se encuentran bajo esta abreviatura. No se puede usar hg cocomo abreviatura hg commitporque es un alias para el comando, hg update,pero la abreviatura está disponible hg ci.
Cuando se invoca el comando hg commit, se confirman los cambios. Al mismo tiempo, el programa guarda un conjunto de cambios (conjunto de cambios en inglés o revisión) en el repositorio. Físicamente, se realizan los mismos cambios que los suyos, pero se guardan en archivos de servicio y no en una copia (más información en Detrás de escena ).
Como regla general, todos los conjuntos de cambios que se han confirmado se muestran como una gran red conectada (gráfico), donde cada conjunto de cambios está asociado con uno o dos más.
Puede encontrar los ID de los conjuntos de cambios principales con los que están asociados los conjuntos de cambios confirmados mediante el comando hg log --debug. Cada conjunto de cambios tendrá dos padres (lo que permite ramificarse dentro del repositorio, ver hg -v help branch). El valor "-1:00000000000000000000000000000000000000000" significa que no hay padre. Por ejemplo, el primer conjunto de cambios en el repositorio tendrá este valor establecido para ambos padres, mientras que los conjuntos de cambios subsiguientes tendrán este valor establecido para el segundo padre (a menos que se haya usado la bifurcación para ellos en el repositorio), y el primer padre tendrá el ID del conjunto de cambios anterior.
También es útil pensar en el directorio de trabajo como el mismo conjunto de cambios (que aún no se ha confirmado, pero que pronto se confirmará también). El directorio de trabajo también está asociado con uno o dos conjuntos de cambios principales, que se pueden encontrar con el comando hg parents. Una vez confirmados los cambios, estos padres se convertirán en los padres del nuevo conjunto de cambios (ya confirmado).
Las revisiones se reconocen por las siguientes características [9] :
El número de revisión es un número entero que representa el orden en que se agregaron los conjuntos de cambios al repositorio. El número de revisión comienza en cero, se asigna automáticamente a un conjunto de cambios y se puede utilizar para identificar conjuntos de cambios. El número de revisión para el mismo conjunto de cambios puede ser diferente en cada clon del repositorio. En la salida del comando hg log, el número de revisión se puede ver antes de los dos puntos (por ejemplo, "4: e1be1898f374").
ID de conjunto de cambiosEl ID del conjunto de cambios es un hash SHA-1 que consta de números y las letras "a, b, c, d, e, f", por ejemplo, "e1be1898f3747386c41c8a5c5776e87373f6d3d3". Un ID de conjunto de cambios se asigna automáticamente a cada conjunto de cambios, calculado a partir del contenido de ese conjunto de cambios y, por lo tanto, corresponde al mismo conjunto de cambios en todos los repositorios. La probabilidad de una colisión, cuando se genera el mismo hash SHA-1 para dos conjuntos de cambios diferentes, es extremadamente pequeña.
Mercurial no requiere la cadena de identificación completa cuando se usa en los comandos, solo necesita la parte inicial que identifica de forma única el conjunto de cambios deseado (de lo contrario, Mercurial informará una ambigüedad). En la salida del comando hg log, el ID del conjunto de cambios se puede ver después de los dos puntos (por ejemplo, "4:e1be1898f374"). Sin un parámetro , el --debugcomando hg logno genera el identificador de conjunto de cambios completo, sino abreviado (de 12 caracteres).
EtiquetasAdemás del número de revisión y la ID del conjunto de cambios, Mercurial ofrece la posibilidad de asignar a cada conjunto de cambios uno o más nombres simbólicos arbitrarios, denominados etiquetas (o etiquetas ). Las etiquetas se asignan con el comando hg tag, y puede ver todas las etiquetas agregadas con el comando hg tags. El nombre de la etiqueta no puede contener algunos caracteres (por ejemplo, ":"), que Mercurial informará al ejecutar el comando si es necesario hg tag.
Siempre que se pueda especificar un ID de conjunto de cambios en los comandos, se puede sustituir el nombre de la etiqueta.
Nombre de la sucursalCada rama tiene su propio nombre. Se especifica cuando se crea la rama y nunca vuelve a cambiar.
A diferencia de git , Mercurial asume un modelo de operación más riguroso, cuyos aspectos más notables son [11] [12] :
Mercurial viene con scripts CGI para proporcionar una interfaz web a los repositorios [13] .
Hay un shell gráfico TortoiseHg [14] que funciona tanto en Windows (con integración con Explorer) como en Linux (como una aplicación separada [15] o con integración con Gnome/Nautilus [16] ). Hay un cliente de consola hgtui en desarrollo para Linux y Windows (usando cygwin).
Atlassian también está promocionando su cliente SourceTree , que brinda acceso tanto a hg como a svn y git.
Varios entornos de desarrollo tienen capacidades de Mercurial, como Microsoft Visual Studio [17] [18] , IntelliJ IDEA [19] [20] [21] , Eclipse [22] , Qt Creator (desde la versión 2.0) [23] , PIDA [24] , NetBeans [25] . Es posible trabajar con Mercurial desde dentro de Emacs utilizando el paquete VC universal incluido con Emacs.
El soporte experimental para Mercurial está disponible en Trac [26] . El proyecto Redmine [27] también mantiene los repositorios de Mercurial.
Usando la utilidad Tailor [28] o la extensión convert [29] es posible convertir [30] repositorios de otros sistemas de control de versiones, incluidos CVS , Subversion , Git , Perforce , Darcs , GNU Arch , Bazaar .
Un número significativo de proyectos de desarrollo de software libre utilizan Mercurial como su principal sistema de control de versiones [31] . Entre ellos:
Se admiten espejos Mercurial de los repositorios principales de otros proyectos [33] , como GCC , Vim , Emacs y el kernel de Linux .
Entre los proyectos que usaron Mercurial durante mucho tiempo, pero cambiaron a Git en 2019-2021, se encuentran Adium , CLISP , Illumos , Coin3D , OpenJDK , SDL [34] .
en redes sociales | |
---|---|
sitios temáticos |
Sistemas de control de versiones ( categoría ) | |
---|---|
Solo locales | |
Servidor de cliente | |
Repartido | |