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