Primeros pasos con Mercurial

Instalación y configuración

Puede descargar Mercurial desde el sitio web del proyecto, y hay utilidades gráficas para Windows, Linux y OSX si lo prefiere a una interfaz de línea de comandos. La mayoría de los administradores de paquetes de Unix incluyen Mercurial, por ejemplo en Debian/Ubuntu:

$ apt-get install mercurial

Puede verificar que Mercurial esté instalado ejecutando:

$ hg --version

Configuración

Mercurial funciona de manera inmediata, pero es probable que desee configurar Mercurial para saber quién es usted antes de continuar. Para asociar un nombre de usuario con sus confirmaciones, edite ~/.hgrc (o mercurial.ini en su directorio de inicio en Windows) y agregue las siguientes líneas:

[ui]
username = Your Name <[email protected]>

Si no desea hacer esto, siempre puede especificar un nombre de usuario cuando se compromete con el indicador -u, por ejemplo:

$ hg commit -u "Your Name <[email protected]>"

Empezando

Ver también el Tutorial de Mercurial

Creación de un depósito de Mercurial

Un repositorio de Mercurial es simplemente un directorio (denominado “directorio de trabajo”) que contiene un directorio .hg con metadatos sobre el contenido del repositorio. Esto hace que Mercurial sea muy ligero y fácil de empezar a usar. Para crear un nuevo repositorio simplemente ejecute:

$ hg init project

Donde proyecto es el nombre del directorio que desea crear. Esto crea un directorio project junto con un directorio project/.hg que contiene el propio repositorio.

   $ cd project
   $ echo Hello World > hello.txt
   $ hg stat
   ? hello.txt

Acabamos de crear un archivo hello.txt en el repositorio y ejecutamos hg status (o stat para abreviar) para ver el estado actual de nuestro repositorio. Como puede ver, hello.txt está anotado con un ?, lo que significa que Mercurial aún no lo sabe. El comando add registra este nuevo archivo con Mercurial para que se incluya en la próxima confirmación.

$ hg add hello.txt

Ahora que Mercurial está al tanto de un archivo modificado, puede ejecutar diff para ver exactamente qué ha cambiado desde la última confirmación; en este caso, agregaremos el contenido completo de hello.txt:

$ hg diff
diff -r 000000000000 hello.txt
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/hello.txt Sat Jul 23 01:38:44 2016 -0400
@@ -0,0 +1,1 @@
+Hello

Y una vez que estemos satisfechos con ellos y listos para verificar nuestros cambios, podemos ejecutar commit:

$ hg commit -m "Created a hello world file."

Tenga en cuenta que incluimos un mensaje de compromiso con -m; si no especifica -m, Mercurial iniciará un editor de texto en el que puede ingresar un mensaje de compromiso. Esto es útil si desea proporcionar un mensaje múltiple más largo. mensaje de línea.

Una vez que haya confirmado sus cambios, ya no aparecerán si ejecuta hg stat ya que el repositorio ahora está sincronizado con el contenido del directorio de trabajo. Puede ejecutar log para ver una lista de confirmaciones, y -v incluye detalles adicionales como los archivos que tocó cada confirmación:

$ hg log -v
changeset:   0:b4c06cc77a42
tag:         tip
user:        Michael [email protected] <[email protected]>
date:        Sat Jul 23 01:44:23 2016 -0400
files:       hello.txt
description:
Created a hello world file.

Empujar y tirar

Mercurial facilita compartir su trabajo y obtener contribuciones de otros desarrolladores. Esto implica tres pasos clave; clonar, tirar y empujar.

Clonar

Para copiar un repositorio remoto a su disco local, lo “clona”. Para hacerlo, simplemente pase la URL remota desde la que desea clonar. Para clonar el código fuente de Mercurial simplemente ejecute:

$ hg clone https://selenic.com/hg

Esto crea un directorio hg local que contiene una copia del repositorio de Mercurial que puede crear, editar y confirmar (aunque no puede volver a publicar sus confirmaciones en el repositorio principal).

Jalar

Una vez que haya desprotegido un repositorio, querrá mantenerlo sincronizado mientras otros publican cambios en él. Puede desplegar nuevos cambios simplemente ejecutando:

$ hg pull

Esto genera nuevas confirmaciones pero no actualiza su directorio de trabajo, por lo que no verá ningún cambio de inmediato. Para actualizar el contenido del directorio de trabajo, ejecute:

$ hg up

Lo que actualiza su directorio de trabajo a la revisión de punta (más reciente) en el repositorio.

También puedes ejecutar:

$ hg pull -u

Para obtener nuevos cambios y actualizar el directorio de trabajo en un solo paso.

Empujar

Suponiendo que tiene acceso de escritura al repositorio remoto, puede publicar cualquier compromiso que haya realizado localmente en el repositorio remoto con la misma facilidad con:

$ hg push

Esto carga sus cambios siempre que no haya habido otras confirmaciones desde la última vez que extrajo. Si su empuje es rechazado porque “crearía cabezas adicionales”, eso significa que necesita incorporar esos nuevos cambios y fusionarlos con los suyos.

$ hg pull
$ hg merge  # this creates a new changeset merging your changes with the remote changes
$ hg commit -m "Merged in remote changes"
$ hg push

La mayoría de las veces esto es todo lo que tendrá que hacer ya que Mercurial maneja la fusión de sus cambios automáticamente, sin embargo, a veces necesitará resolver los conflictos de fusión manualmente (vea el tema de fusión). Si lo necesita, siempre puede cancelar una combinación y volver a un directorio de trabajo limpio con:

$ hg up -c

Pero recuerda que esta es una operación destructiva; se borrarán todos los cambios en el directorio de trabajo.

Ramificación

Cuando comenzamos nuestro trabajo por primera vez, tenemos que decidir si esta es un área de trabajo separada en la que estamos trabajando o si es parte de una línea de trabajo existente. Si existe, podemos trabajar fuera de esa rama. Si es nuevo, abriremos una nueva sucursal.

Nuestro flujo de trabajo entonces es:

  • hg branch MyNewFeature
  • trabajo Trabajo trabajo
  • hg commit -m "commitiendo mis cambios"
  • trabajo Trabajo trabajo
  • hg commit -m "más cambios"

En este punto, queremos enviar nuestro trabajo al servidor remoto. Pero antes de enviar los cambios (ignore esto si es una rama nueva que no ha enviado antes), debemos verificar si hay algún cambio entrante en esta rama. Podemos comprobar esto con:

hg incoming -b .

Si hay conjuntos de cambios entrantes en nuestra rama, debemos hacer una extracción y volver a colocar nuestros cambios en la parte superior de la lista de cambios.

hg pull -b . --rebase

Una vez hecho esto o si no hay conjuntos de cambios entrantes, podemos continuar con el Push.

Solo queremos impulsar nuestro trabajo actual, no todo lo que hemos hecho. Realmente nunca presiono todo mi repositorio, sino mi línea de trabajo actual. El razonamiento es que impulsar todo el repositorio supone que estoy integrando múltiples líneas de trabajo. Pero solo quiero integrar mi línea de trabajo actual y solo quiero trabajar en una línea a la vez.

Si esta es la primera vez que estoy empujando esta rama:

hg push -b . --new-branch

Si ya he empujado esta rama:

hg push -b .

El b ." comando significa simplemente empujar la rama actual, y nada más.

Para cambiar entre las ramas de trabajo:

hg update myBranchName