Mercurial, por favor
Mercurial es otro sistema de control de versiones distribuido (otro más) que no tiene nada (o poco) que envidiar a git (en lo referente a prestaciones) pero casi tan fácil de usar como subversion. Esta recetilla incluye unas nociones de su uso básico y algunas buenas referencias.
Introducción
Al igual que git, mercurial está muy influenciado por las ideas de monotone, pero al contrario que git, la gente de mercurial ha hecho algo de esfuerzo por no complicar demasiado su uso. El resultado es una mezcla de la facilidad de subversion con la potencia y posibilidades de git.
La siguiente figura es un esquema del funcionamiento de las órdenes más comunes:
Crear un repositorio
Partiendo de un directorio (vacío o no):
si quieres añadir al repo lo que hubiera en ese directorio:
Uso básico
Mercurial dispone de los comandos habituales en un VCS tradicional:
- add
- commit (ci)
- update (up)
- status (st)
Pero al ser mercurial un VCS distribuido, estas operaciones ocurren sobre un repositorio local. Para trabajar con un repositorio ajeno dispone de comandos similares a git
:
- clone
- pull
- push
Ver cambios respecto del repo master
- incoming: cambios en el master que no están en tu copia
- outgoing: cambios de tu copia que no están en el master
¿Qué es esto del merge
?
Puede que te resulte raro ver un mensaje como este al hacer una operación pull
o update
:
Si compartes el repositorio con otras personas (que para eso está) es muy habitual que te encuentres con que varias personas han hecho cambios a partir de la misma versión. Otros programas, como subversion, mezclan automáticamente estos cambios. Si eso afectaba a las mismas líneas de un fichero, subversion decía que había un «conflicto» y marcaba sobre el propio fichero la zona afectada.
En mercurial esto es ligeramente distinto. Cuando hay más de un cambio sobre la última versión, se dice que hay varias «cabezas» (que se pueden ver con hg heads
). Esas cabezas se pueden mezclar en una sola con:
Y tal como dice el aviso, debes hacer hg commit
aunque lo hubieras hecho previamente, puesto que el merge
cambia el contenido de los ficheros.
Clonar un repositorio remoto
Mercurial soporta varios protocolos: ssh, http(s), inotify. El siguiente comando clona un repositorio accesible por SSH:
Crear un repositorio compartido (al estilo CVS)
Necesitas crear un grupo UNIX y hacer que todos los usuarios que podrán utilizar el repositorio pertenezcan a dicho grupo.
Luego crea un directorio e inicialízalo como repositorio mercurial:
Después debes darle los permisos necesarios para que todos los usuarios del grupo puedan utilizarlo:
También es muy importante que el umask
de los usuarios sea 002 o menos restrictivo. Puedes añadir la siguiente línea al /etc/profile
: