Inspirado por Git para principiantes: la guía práctica definitiva .
Esta es una recopilación de información sobre el uso de Mercurial para principiantes para uso práctico .
Principiante: un programador que ha tocado el control de fuente sin entenderlo muy bien.
Práctico: cubre situaciones que la mayoría de los usuarios encuentran a menudo: crea un repositorio, bifurca, fusiona, tira / empuja desde / hacia un repositorio remoto, etc.
Notas :
- Explica cómo hacer algo en lugar de cómo se implementa algo.
- Tratar con una pregunta por respuesta.
- Responda con la mayor claridad y precisión posible.
- Edite / extienda una respuesta existente en lugar de crear una nueva respuesta sobre el mismo tema.
- Proporcione un enlace a la wiki de Mercurial o al Libro HG para las personas que desean obtener más información.
Preguntas:
Instalación / Configuración
- ¿Cómo instalar Mercurial?
- ¿Cómo configurar Mercurial?
- ¿Cómo se crea un nuevo proyecto / repositorio?
- ¿Cómo se configura para ignorar los archivos?
Trabajando con el código
- ¿Cómo se obtiene el último código?
- ¿Cómo verificas el código?
- ¿Cómo se comprometen los cambios?
- ¿Cómo ves lo que no está comprometido o el estado de tu base de código actual?
- ¿Cómo se eliminan los archivos del repositorio?
- ¿Cómo destruyes los commits no deseados?
- ¿Cómo compara dos revisiones de un archivo, o su archivo actual y una revisión anterior?
- ¿Cómo ve el historial de revisiones de un archivo o repositorio?
- ¿Cómo maneja los archivos binarios (visio docs, por ejemplo, o entornos de compilación)?
- ¿Cómo se combinan los archivos cambiados al "mismo tiempo"?
- ¿Cómo se revierte un conjunto de cambios?
- ¿Cómo vuelves a una versión anterior del código?
- ¿Cómo se extrae un parche de un conjunto de cambios específico?
- ¿Cómo registra que renombró o eliminó un archivo sin usar el comando Mercurial?
Etiquetado, ramificación, lanzamientos, líneas de base
- ¿Cómo 'marca' 'etiqueta' o 'libera' un conjunto particular de revisiones para un conjunto particular de archivos para que siempre pueda extraerlo más adelante?
- ¿Cómo se extrae un 'lanzamiento' en particular?
- ¿Cómo se ramifica?
- ¿Cómo se fusionan las ramas?
- ¿Cómo fusionar partes de una rama en otra rama?
Otro
- ¿Buen plugin GUI / IDE para Mercurial? ¿Ventajas desventajas?
- ¿Alguna otra tarea común que un principiante deba saber?
- ¿Cómo interactúo con Subversion?
hg add
ignora manualmente los archivos, Mercurial los rastreará. Por ejemplo, si usted tiene un montón de archivos comodeploy-test.conf
,deploy-production.conf
no, etc., y hace falta para los versión (que podrían tener las contraseñas en ellos), pero que hacer desea versióndeploy-template.conf
sólo se puede ignorardeploy*
y añadir manualmentedeploy-templace.conf
.¿Cómo ves lo que no está comprometido o el estado de tu base de código actual?
Para ver una lista de archivos que han cambiado:
Esto imprimirá cada archivo que se haya cambiado junto con su estado, que puede incluir:
M
- Modificado. El archivo ha sido modificado y los cambios no se han confirmado.A
- Adicional. El archivo no fue rastreado antes, pero si confirma Mercurial comenzará a rastrearlo.R
- Eliminado El archivo fue rastreado antes, pero si confirma Mercurial dejará de rastrearlo en este y futuros confirmaciones.?
Desconocido Mercurial no rastrea actualmente el archivo. Comprometerse no tendrá ningún efecto a menos que lo useshg add
para agregarlo.!
- Desaparecido. Se realizó un seguimiento del archivo, pero Mercurial no puede encontrarlo en la copia de trabajo.Para ver los cambios que realmente se han realizado en los archivos:
fuente
¿Cómo se crea un nuevo proyecto / repositorio?
fuente
¿Cómo interactúo con Subversion?
Hay tres formas:
La extensión de conversión clonará un repositorio Subversion existente en uno Mercurial. Viene con Mercurial. Funciona más o menos así:
Por ejemplo, esto tomará el tronco del repositorio memcached de SixApart.
La extensión puede incorporar de forma incremental nuevas revisiones desde un repositorio de Subversion al Mercurial (un poco como pull). Sin embargo, no admite tomar revisiones de Mercurial y enviarlas de nuevo a Subversion (sin inserción). [XXX: corrígelo si está mal] .
La extensión hgsubversion . Es, en muchos sentidos, la solución más sofisticada, ya que utiliza la API de Subversion para comunicarse con el repositorio de Subversion. Su objetivo es convertirse en el puente hg-svn. Permiten una revisión completa de las revisiones (clon completo, extracción y empuje). Sin embargo, al momento de escribir esto [XXX: Enmendar esto si / cuando se vuelva incorrecto] todavía está en desarrollo y aún no hay lanzamientos oficiales. Como consecuencia, funciona solo con el Mercurial más actualizado (1.3 al momento de escribir este artículo).
tags/
para distinguirlas de ramas con nombres equivalentes).closed-branches
para cerrar las ramas que se eliminan en Subversion.hg svn <subcommand>
tiene como objetivo integrarse hasta el punto de que no necesita la parte 'svn' (es decir, quiere tratar un clon de Subversion tanto como sea posible como cualquier otro repositorio de Mercurial) .;Funciona así:
clon:
O (solo para
svn://
URL)Halar:
empujar:
entrante:
saliente:
Verificando un repositorio completo:
La utilidad hgsvn ( árbol de bitbucket ). Hasta hace poco, esto solo le permitía clonar y extraer un repositorio de Subversion, pero a partir de
hgsvn 0.1.7
él admite la inserción. [No sé qué tan bien empuja. Cualquier persona con más experiencia debería actualizar esto.] Tiene las siguientes características notables:branches/some-feature
sería comohg branch some-feature
. Pone el troncotrunk
(es decir, no hay nada en la rama predeterminada de Mercurial, a menos que el usuario lo cambie explícitamente).Funciona así:
clon:
Halar:
empujar:
entrante:
saliente:
Verificando un repositorio completo:
Verificando solo el tronco:
fuente
hg convert
y realmente lleva mucho tiempo cuando tienes un repositorio svn con muchas confirmaciones. La configuración de un repositorio localsvnsync
ayuda mucho a acelerar las cosas, especialmente cuando necesita hacerlo varias veces, porque tenía algunas opciones incorrectas en su comando de conversión.svnsync
necesitaba acceder a los archivos reales del repositorio, no solo a la URL.¿Cómo compara dos revisiones de un archivo, o su archivo actual y una revisión anterior?
Ambos usan
hg diff
. Cuandohg diff
se utiliza todos los cambios en la copia de trabajo y se muestra la sugerencia (la última confirmación).Para "¿Cómo se comparan dos revisiones de un archivo?"
El comando anterior mostrará diferentes entre rev1 y rev2 de "file.code".
Para "¿Cómo compara su archivo actual y una revisión anterior?"
El comando anterior mostrará diferentes entre la versión actual de "file.code" y la última revisión (la última comprometida).
:RE
fuente
¿Cómo 'marca' 'etiqueta' o 'libera' un conjunto particular de revisiones para un conjunto particular de archivos para que siempre pueda extraerlo más adelante?
También puede clonar su repositorio para crear un repositorio de etiquetas especial .
fuente
hg tag my-tag
?¿Cómo se ramifica?
$ hg branch my-branch
o
$ hg clone repositorio original my-branch
Aunque debe tenerse en cuenta que la rama crea un directorio "virtual" (es decir, los archivos permanecen igual, pero hg los trata como si fueran diferentes dentro del sistema), mientras que el clon crea una copia real y completa. Estrictamente hablando, el clon no se ramifica.
fuente
hg branch my-branch
¿Buen plugin GUI / IDE para Mercurial?
GUI
Complementos
fuente
¿Cómo se comprometen los cambios?
Invoque este comando desde el repositorio mercurial local * actual
alias: ci
Donde la opción puede ser:
Un comando de ejemplo sería:
NOTAS :
fuente
¿Cómo configurar Mercurial?
Mercurial almacena su información de configuración en
~/.hgrc
sistemas * nix y en%UserProfile%\mercurial.ini
sistemas Windows. (%UserProfile%
normalmente"C:\Documents and Settings\[username]\"
en sistemas Windows 2000 o Windows XP, y generalmenteC:\Users\[username]\
en sistemas Windows Vista y Windows 7).Como punto de partida, debe establecer su nombre de usuario Mercurial colocando lo siguiente en su
.hgrc
omercurial.ini
:Los usuarios de TortoiseHg en sistemas Windows pueden ejecutar alternativamente
hgtk userconfig
Consulte también " Creación de un archivo de configuración de Mercurial " en el capítulo 2 de " Mercurial: la guía definitiva ".
fuente
¿Cómo se fusionan las ramas?
fuente
¿Cómo instalar Mercurial?
Edite bien si ha instalado desde la fuente en Linux o ha utilizado los instaladores de Windows.
Mac OS X 10.4 (Tiger), 10.5 (Leopard)
Utilice easy_install de Python (con Setuptools ):
Esto encuentra la última versión (1.3.1 en el momento de la escritura) y se instala en:
Con Python 2.6, esto también evita el paquete de instalación de Mercurial OS X (en 1.2.1 a partir del 26 de julio de 2009) quejándose de que necesita Python 2.5. De la documentación , parece que Fink y Macports instalan la versión 1.2.
Linux
La mayoría de los paquetes explícitos de Linux parecen estar rezagados con respecto a la versión actual, así que use easy_install (como arriba) o descargue el tarball de Mercurial , extraiga el archivo, cambie al directorio mercurial y ejecute:
(de Introducing Mercurial, un sistema de control de versiones distribuido )
Ventanas
Hay un paquete binario de la última versión de Mercurial . TortoiseHg es una extensión de shell de Windows para e instala Mercurial. Cygwin también puede instalar Mercurial.
Alternativamente (las instrucciones son demasiado largas y están vinculadas aquí), puede construir una versión optimizada o pura de Mercurial en Python desde la fuente.
fuente
¿Cómo se obtiene el último código?
Mercurial recuerda dónde se clonó un repositorio (en .hg / hgrc) para que pueda simplemente ejecutar:
para extraer el último código del repositorio de origen. (Esto no actualiza el directorio de trabajo)
para actualizar el directorio de trabajo.
para realizar una extracción y una actualización a la vez.
fuente
.hg/hgrc
cuando hace un clon, por lo que no tiene que especificarlo cuando tira / empuja. Puede agregar más rutas a la[paths]
sección.hg/hgrc
si lo desea.¿Cómo verificas el código?
Donde la opción puede ser:
Donde source es la fuente de los archivos originales ubicados en el repositorio, donde puede ser una URL remota o un directorio del sistema de archivos. Por ejemplo:
Y el destino es donde se ubicará el código fuente en su sistema de archivos local.
fuente
¿Cómo se comprometen los cambios?
fuente
¿Cómo ve qué cambios se enviarán al repositorio ascendente cuando presiona?
Use
hg outgoing
para obtener la lista de conjuntos de cambios que se establecerán en el repositorio predeterminado:Para obtener los cambios de código reales, use
-p
(--patch
). Esto generará cada conjunto de cambios en su totalidad:fuente
¿Cómo se elimina un archivo del repositorio?
Para eliminar un archivo del repositorio y eliminarlo en la próxima confirmación:
Para eliminar un archivo del repositorio, pero no eliminarlo
o de Mercurial 1.3
fuente
¿Cómo vuelves a una versión anterior del código?
De esta pregunta
@van: Si luego te comprometes, crearás una nueva rama de manera efectiva. Entonces puede continuar trabajando solo en esta rama o eventualmente fusionar la existente en ella.
fuente
¿Cómo se revierte un conjunto de cambios?
Un par de opciones disponibles
Easy Way (retroceder un solo conjunto de cambios)
Hard Way (diferir y aplicar manualmente)
Paso 1 : Cree un archivo de parche para revertir lo que cambió entre la revisión 107 y 108:
(alternativamente, hg diff -r108 -r107 sin --reverse hará lo mismo)
Paso 2 : aplique el archivo de parche:
Algunas de las diferencias pueden no aplicarse, por ejemplo:
El archivo .rej contendrá el contenido de la diferencia que no se pudo aplicar, deberá echar un vistazo.
fuente
hg backout
sirve?¿Cómo ve el historial de revisiones de un archivo o repositorio?
Para mostrar el historial de revisión de todo el repositorio o archivos
o
Y para ver la lista en orden inverso
fuente
¿Cómo fusionar partes de una rama en otra rama?
Habilite la extensión 'transplante' en su .hg / hgrc
Cargue la rama objetivo y luego trasplante la revisión objetivo.
Por ejemplo: Cherry Pick revisión 81 de la rama 'foo' en la rama actual
fuente
graft
comando incorporado para hacer lo mismo.hg help graft
para más información¿Cómo se extrae un parche de un conjunto de cambios específico?
Luego puede importar esto a otra rama con:
fuente