version-control - significado - mercurial svn
Mercurial para principiantes: la guía práctica definitiva (22)
¿Cómo instalar Mercurial?
Edite bien si ha instalado desde la fuente en Linux, o ha usado los instaladores de Windows.
Mac OS X 10.4 (Tiger), 10.5 (Leopard)
Use el programa de instalación fácil de Python (con Setuptools ):
sudo easy_install mercurial
Esto encuentra la última versión (1.3.1 en el momento de la escritura) y se instala en:
/Library/Frameworks/Python.framework/Versions/2.6/bin/
Con Python 2.6 esto también evita el paquete del instalador de Mercurial OS X (a 1.2.1 hasta el 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, por lo tanto, use easy_install (como se easy_install arriba) o descargue el archivo comprimido de Mercurial , extraiga el archivo, cambie al directorio de mercurial y ejecute:
$ make
$ sudo make install # do a system-wide install
$ hg debuginstall # sanity check
$ hg # see help
(de Introducing Mercurial, un sistema de control de versiones distribuido )
Windows
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, así que se vinculan aquí), puede crear una versión de Mercurial Python optimizada o pura desde la fuente.
Inspirado en 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 código fuente sin entenderlo muy bien.
Práctico: cubre situaciones que la mayoría de los usuarios encuentran a menudo: crear un repositorio, ramificar, fusionar, jalar / empujar 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 de la manera más clara y concisa posible.
- Edite / amplíe 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 deseen 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 archivos?
Trabajando con el código
- ¿Cómo se obtiene el último código?
- ¿Cómo verifica el código?
- ¿Cómo se comprometen los cambios?
- ¿Cómo ve lo que no está comprometido o el estado de su base de código actual?
- ¿Cómo eliminar archivos del repositorio?
- ¿Cómo se destruyen los compromisos 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 (documentos de visio, por ejemplo, o entornos de compilación)?
- ¿Cómo fusionar archivos cambiados al mismo tiempo?
- ¿Cómo revertir un Changeset?
- ¿Cómo volver a una versión anterior del código?
- ¿Cómo extraes 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 ''lanza'' un conjunto particular de revisiones para un conjunto particular de archivos para que siempre pueda extraer eso más adelante?
- ¿Cómo sacas un ''lanzamiento'' particular?
- ¿Cómo se ramifica?
- ¿Cómo fusionar ramas?
- ¿Cómo fusionar partes de una rama en otra?
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?
Otras referencias mercuriales.
- Mercurial: la guía definitiva
- Wiki Mercurial
- Conoce a Mercurial | Peepcode Screencast
- Dominar Mercurial | TekPub Screencast
- Hg Init - tutorial de Mercurial molido
¿Cómo revertir un Changeset?
Un par de opciones disponibles.
Easy Way (retroceso de un solo conjunto de cambios)
$ hg backout -m ''back out second change'' tip
reverting myfile
changeset 2:01adc4672142 backs out changeset 1:7e341ee3be7a
$ cat myfile
first change
Difícil camino (manualmente dif y aplicar)
Paso 1 : Cree un archivo de parche para revertir lo que cambió entre la revisión 107 y 108:
hg diff -r107 -r108 --reverse > revert-change.patch
(alternativamente, hg diff -r108 -r107 sin --reverso hará lo mismo)
Paso 2 : Aplicar el archivo de parche:
patch -p1 < revert-change.patch
Es posible que algunas de las diferencias no se apliquen, por ejemplo:
Hunk #3 FAILED at 517.
1 out of 3 hunks FAILED -- saving rejects to file ''foo/bar.c.rej''
El archivo .rej contendrá el contenido del diff que no se aplicó, tendrá que echarle un vistazo.
¿Cómo se configura para ignorar archivos?
Ignore se configura en un archivo de texto normal llamado .hgignore en la raíz de su repositorio. Agrégalo como un archivo normal con:
hg add .hgignore
Hay dos opciones de sintaxis disponibles para la coincidencia de archivos, glob y regexp. glob es una expansión de nombre de archivo similar a Unix y regexp son expresiones regulares. Active cada uno agregando syntax: glob
o syntax: regexp
en una línea por sí mismo. Todas las líneas siguientes usarán esa sintaxis, hasta el siguiente marcador de sintaxis. Puedes tener tantos marcadores de sintaxis como quieras. La sintaxis predeterminada es regexp, por lo que si solo usa regexp no necesita ningún marcador de sintaxis.
Puedes agregar comentarios con #
Ejemplo:
# python temporary files
syntax: glob
*.pyc
#editor autosaves
*~
# temporary data
syntax: regexp
temp
Ignorar solo se aplica a archivos no administrados (es decir, archivos que aún no están registrados). Para ignorar los archivos que están bajo el control de versiones, puede usar los modificadores -I y -X.
¿Buen plugin GUI / IDE para Mercurial?
GUI
- TortoiseHg para casi cualquier sistema operativo. Incluye la integración de Windows Explorer. También funciona en Linux y en algunos otros sistemas operativos, incluido Max OS X. Tiene una interfaz algo torpe y es un poco incómodo de usar al principio, pero es muy completo y potente.
- Murky ejecuta en Mac OS X 10.5 o posterior. Murky es bueno para explorar el repositorio y los comandos básicos, pero también necesitará saber cómo usar la línea de comandos.
- MacHg es un bonito Mac OS X Gui que tiene un poco más de funcionalidad y pulido que Murky, pero también necesitarás la línea de comandos.
- SourceTree es originalmente un cliente de Mac, con una versión de Windows disponible recientemente. La IU bastante agradable (al menos en OS X), es compatible con la mayoría de las funciones de Hg, incluida la función de almacenamiento.
Complementos
- VisualHG para Visual Studio
- HgSccPackage para Visual Studio 2008/2010
- Eclipse de MercurialEclipse para Eclipse
- Soporte Mercurial para NetBeans.
- Soporte mercurial para texto sublime.
¿Cómo ''marca'' ''etiqueta'' o ''libera'' un conjunto particular de revisiones para un conjunto particular de archivos para que siempre pueda extraer eso más tarde?
$ hg tag my-tag
También puede clonar su repositorio para crear un repositorio de etiquetas especiales.
$ hg clone working-repository my-tag-repository
¿Cómo compara dos revisiones de un archivo, o su archivo actual y una revisión anterior?
Ambos utilizan hg diff
. Cuando se usa hg diff
se muestran todos los cambios en la copia de trabajo y la sugerencia (la última confirmación).
Para "¿Cómo se comparan dos revisiones de un archivo?"
$ hg diff -r{rev1} -r{rev2} {file.code}
El comando anterior mostrará diferente entre rev1 y rev2 de "file.code".
Para "¿Cómo compara su archivo actual y una revisión anterior?"
$ hg diff {file.code}
El comando anterior mostrará diferente entre la versión actual de "file.code" y la última revisión (la última comprometida).
:RE
¿Cómo configurar Mercurial?
Mercurial almacena su información de configuración en ~/.hgrc
en sistemas * nix y en %UserProfile%/mercurial.ini
en sistemas Windows. ( %UserProfile%
suele ser "C:/Documents and Settings/[username]/"
en los sistemas Windows 2000 o Windows XP, y generalmente C:/Users/[username]/
en los sistemas Windows Vista y Windows 7).
Como punto de partida, debe configurar su nombre de usuario de Mercurial colocando lo siguiente en su .hgrc
o mercurial.ini
:
# This is a Mercurial configuration file.
[ui]
username = Firstname Lastname <[email protected]>
Los usuarios de TortoiseHg en sistemas Windows también pueden ejecutar 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 ".
¿Cómo extraes un parche de un conjunto de cambios específico?
$ hg export -o patchfile changeset
A continuación, puede importar esto en otra rama con:
$ hg import patchfile
¿Cómo fusionar partes de una rama en otra?
Habilite la extensión de ''trasplante'' en su .hg / hgrc
[extensions]
transplant=
Cargue la rama de destino y luego trasplante la revisión de destino.
por ejemplo: cherry pick revision 81 de la rama ''foo'' a la rama actual
$ hg transplant -b foo 81
¿Cómo fusionar ramas?
$ cd repository-where-i-want-to merge
$ hg pull branch-i-want-to-merge
$ hg merge # if necessary
¿Cómo interactúo con Subversion?
Hay tres maneras:
La extensión de conversión clonará un repositorio de Subversion existente en uno de Mercurial. Viene con Mercurial. Funciona más o menos así:
hg convert <Subversion URL or directory> <path to new Mercurial repository>
Por ejemplo, esto tomará el tronco del repositorio de memcached de SixApart.
hg convert http://code.sixapart.com/svn/memcached/trunk
La extensión puede incorporar nuevas revisiones desde un repositorio de Subversion a Mercurial (un poco como tirar). Sin embargo, no admite tomar las revisiones de Mercurial y enviarlas de vuelta a Subversion (no push). [XXX: corrige esto si es incorrecto] .
La extensión hgsubversion . En muchos sentidos, es 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. Permite la realización de revisiones completas (clone, pull y push), sin embargo, en el momento de escribir esto [XXX: corríjalo si / cuando se vuelve incorrecto] todavía está en desarrollo y todavía no hay versiones oficiales. Como consecuencia, funciona solo con Mercurial más actualizado (1.3 en el momento de escribir este artículo).
- Asigna etiquetas y ramas (antes de todas las etiquetas con
tags/
para distinguirlas de las ramas con nombres equivalentes). - Mantiene una rama especial ramas
closed-branches
para cerrar ramas que se eliminan en Subversion. - Requiere que el repositorio de Subversion se establezca de acuerdo con la convención de trunk / branch / tags.
- El conjunto de comandos suele ser
hg svn <subcommand>
aunque apunta a integrarse hasta el punto de que no necesita la parte ''svn'' (es decir, quiere tratar un clon de Subversion lo más posible como cualquier otro repositorio de Mercurial). ;
Funciona así:
clon:
hg svnclone <Subversion URL>
O (solo para svn://
URLs)
hg clone <svn:// URL>
Halar:
hg svn pull
empujar:
hg svn push
entrante:
hg svn incoming
saliente:
hg svn outgoing
Revisando un repositorio completo:
hg svnclone http://code.sixapart.com/svn/memcached
La utilidad hgsvn ( bitbucket tree ). Hasta hace poco, esto solo le permitía clonar y extraer un repositorio de Subversion, pero a partir de la hgsvn 0.1.7
de hgsvn 0.1.7
es compatible con push. [No sé lo bien que empuja. Cualquier persona con más experiencia debería actualizar esto.] Tiene las siguientes características notables:
- Genera una etiqueta Mercurial para cada etiqueta SVN.
- Pone una etiqueta local en cada conjunto de cambios para marcar su revisión de SVN.
- Pone cada revisión de Mercurial en una rama nombrada después de su rama SVN. Por ejemplo,
branches/some-feature
sería comohg branch some-feature
. Pone el tronco en eltrunk
(es decir, no hay nada en la rama predeterminada de Mercurial, a menos que el usuario lo cambie explícitamente). - Intentará identificar ramas y etiquetas y crearlas, pero si no puede, simplemente las omite. Esto es útil cuando el repositorio de Subversion no está siguiendo el diseño de troncal / ramas / etiquetas convencional.
Funciona así:
clon:
hgimportsvn <Subversion URL>
Halar:
hgpullsvn
empujar:
hgpushsvn
entrante:
hgpullsvn -n
saliente:
hgpushsvn -n
Revisando un repositorio completo:
hgimportsvn http://code.sixapart.com/svn/memcached
Echando un vistazo sólo el tronco:
hgimportsvn http://code.sixapart.com/svn/memcached/trunk
¿Cómo se comprometen los cambios?
Invoque este comando desde el repositorio mercurial local actual *
hg commit [OPTION]... [FILE]...
alias: ci
- Un repositorio local de mercurial tiene .hg dentro del directorio actual
Donde la opción puede ser:
-A --addremove mark new/missing files as added/removed before committing
--close-branch mark a branch as closed, hiding it from the branch list
-I --include include names matching the given patterns
-X --exclude exclude names matching the given patterns
-m --message use <text> as commit message
-l --logfile read commit message from <file>
-d --date record datecode as commit date
-u --user record user as committer
Un ejemplo de comando sería:
hg commit -m "added readme" README
NOTAS :
- Si se omite una lista de archivos, se confirmarán todos los cambios informados por "hg status".
- Si está confirmando el resultado de una combinación, no proporcione ningún nombre de archivo o filtros -I / -X.
- Si no se especifica ningún mensaje de confirmación, se inicia el editor configurado para solicitarle un mensaje.
¿Cómo se comprometen los cambios?
$ hg commit -m "Commit message"
¿Cómo se crea un nuevo proyecto / repositorio?
$ hg init my-repository
¿Cómo se elimina un archivo del repositorio?
Para eliminar un archivo del repositorio, y elimínelo en la siguiente confirmación:
$ hg remove {file(s)}
Para eliminar un archivo del repositorio, pero no tenerlo eliminado
$ hg remove -Af {file(s)}
o desde Mercurial 1.3
$ hg forget {file(s)}
¿Cómo se obtiene el último código?
Mercurial recuerda de dónde se clonó un repositorio (en .hg / hgrc), por lo que simplemente puede ejecutar:
hg pull
para extraer el último código del repositorio de origen. (Esto no actualiza el directorio de trabajo)
hg update
para actualizar el directorio de trabajo.
hg pull -u
para realizar tanto un tirón como una actualización a la vez.
¿Cómo se ramifica?
$ hg rama my-branch
o
$ hg clon original-repositorio my-branch
Aunque se debe tener 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.
¿Cómo ve el historial de revisiones de un archivo o repositorio?
Para mostrar el historial de revisiones de todo el repositorio o archivos.
$ hg log {file(s)}
o
$ hg history {file(s)}
Y para ver la lista en orden inverso.
$ hg log -r:
¿Cómo ve lo que no está comprometido o el estado de su base de código actual?
Para ver una lista de archivos que han sido modificados:
$ hg status
Esto imprimirá cada archivo que se haya modificado junto con su estado, que puede incluir:
-
M
- Modificado. El archivo ha sido cambiado y los cambios no han sido confirmados. -
A
- Añadido. El archivo no fue rastreado anteriormente, pero si confirma Mercurial comenzará a rastrearlo. -
R
- Eliminado. El archivo fue rastreado anteriormente, pero si lo confirma, Mercurial dejará de rastrearlo en este y futuros compromisos. -
?
- Desconocido. El archivo no es actualmente seguido por Mercurial. La confirmación no tendrá ningún efecto a menos que usehg add
para agregarla. -
!
- Desaparecido. El archivo fue rastreado pero Mercurial no puede encontrarlo en la copia de trabajo.
Para ver los cambios que realmente se han hecho a los archivos:
$ hg diff
¿Cómo ve qué cambios se enviarán al repositorio ascendente cuando presione?
Use hg outgoing
para obtener la lista de conjuntos de cambios que se establecerán en el repositorio predeterminado:
$ hg outgoing
Para obtener los cambios de código reales, use -p
( --patch
). Esto dará salida a cada conjunto de cambios en su totalidad:
$ hg outgoing -p
¿Cómo verifica el código?
hg clone [OPTION]... SOURCE [DEST]
Donde la opción puede ser:
-U --noupdate the clone will only contain a repository (no working copy)
-r --rev a changeset you would like to have after cloning
--pull use pull protocol to copy metadata
--uncompressed use uncompressed transfer (fast over LAN)
-e --ssh specify ssh command to use
--remotecmd specify hg command to run on the remote side
Donde fuente 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:
- http://bitbucket.org/scrum8/django-wmd-editor/
- / home / username / repository / django-wmd-editor /
- ssh: //[email protected]/~/repository/django-wmd-editor/
Y el destino es donde se ubicará el código fuente en su sistema de archivos local.
¿Cómo volver a una versión anterior del código?
$ hg update [-r REV]
@van: Si luego te comprometes, crearás efectivamente una nueva rama. Luego, puede continuar trabajando solo en esta rama o eventualmente fusionar la existente en ella.