¿Cómo puedo agregar repositorios remotos en Mercurial?

99

Estoy trabajando con repositorios de Git de la siguiente manera:

  • Tengo el repositorio principal y varios controles remotos en las diferentes máquinas de producción.
  • Estoy enviando el código de producción a los controles remotos y reinicio los servicios para que los cambios surtan efecto.

Estoy a punto de cambiar de Git a Mercurial y me gustaría saber con anticipación cómo puedo lograr algo así.

top-less
fuente

Respuestas:

130

Agrega entradas a la [paths]sección del .hg/hgrcarchivo de su clon local . Aquí hay un ejemplo de una sección que iría en el .hg/hgrcarchivo:

[paths]
remote1 = http://path/to/remote1
remote2 = http://path/to/remote2

Luego, puede usar comandos como hg push remote1enviar conjuntos de cambios a ese repositorio. Si desea que ese repositorio remoto se actualice es el directorio de trabajo, deberá colocar un changegroupenlace en esa ubicación remota que realiza una actualización. Eso se vería algo así como:

[hooks]
changegroup = hg update 2>&1 > /dev/null && path/to/script/restart-server.sh

No todo el mundo es un gran admirador de que los repositorios remotos actualicen automáticamente sus directorios de trabajo en push, y ciertamente no es el predeterminado.

Ry4an Brase
fuente
23
Para cualquiera que quiera ver el uso de los controles remotos, hg pathsque es equivalente a git remote -v.
Keyo
5
default-push (en lugar de, por ejemplo, remote1) permite escribir "hg push". A continuación, se utiliza el repositorio de inserción predeterminado. Muy útil.
Christian
6
@Christian default-pushsolo es necesario / útil si su objetivo de empuje habitual difiere de su fuente de atracción habitual. Si son iguales (o nunca tira), es defaultsuficiente.
Ry4an Brase
2
Solo para agregar aún más sobre esto: si tiene ambos default-pushy defaulten su archivo de configuración, entonces el primero se usará para presionar y el segundo para extraer. Si desea presionar y extraer desde el mismo repositorio remoto (lo que probablemente haga si está usando Mercurial de una manera centralizada), solo ingrese defaultel archivo. Sería genial si agregaran una pequeña opción de línea de comando para hacer eso en el primer impulso ... (o tal vez soy demasiado una persona CVS ;-))
tiktak
Tengo Mercurial v2.6.2 instalado en mi Mac y el archivo para establecer las rutas está en .hg/hgrc(sin DOT antes del nombre del archivo).
Regis Zaleman
9

si desea agregar una ruta predeterminada, debe trabajar con ella defaulten su ~project/.hg/hgrcarchivo. Como sigue:

[paths]
default = https://path/to/your/repo

Buena suerte.

Akash
fuente
5

Podrías echarle un vistazo al complemento hg-git GitHub :

idea general de hg-git

agregando la capacidad de empujar y extraer de un repositorio de servidor Git desde Mercurial.
Esto significa que puede colaborar en proyectos basados ​​en Git desde Mercurial o utilizar un servidor Git como punto de colaboración para un equipo con desarrolladores que utilizan tanto Git como Mercurial.

Nota: No he probado esa herramienta con las últimas versiones de Mercurial.

VonC
fuente
1
Tengo la capacidad de portar todo a mercurial, me gustaría usar solo una herramienta para mi administración de fuentes. Convierta una vez que el repositorio cree las estructuras adecuadas y luego solo los comandos mercuriales para la producción. Soy consciente de que tanto git como mercurial pueden colaborar, pero nunca lo intenté.
topless
2
^ Chris: así es tu pregunta: ¿cómo convierto los repositorios de Git a los de Mercurial? ", O" ¿cómo declarar / configurar el repositorio de Hg remoto? "(Como en superuser.com/questions/43686/… ), o" ¿dónde ¿remoto se declara en Hg? "( crazythinking.wordpress.com/2009/03/07/… )
VonC
0

Si está en Unix y tiene Git instalado, puede usar esta función bash para agregar fácilmente una ruta a los controles remotos sin un editor de texto:

add-hg-path() {
    git config -f $(hg root)/.hg/hgrc --add paths.$1 $2
    awk '{$1=$1}1' $(hg root)/.hg/hgrc > /tmp/hgrc.tmp
    mv /tmp/hgrc.tmp $(hg root)/.hg/hgrc
}

Luego invocalo con:

$ add-hg-path remote1 https://path.to/remote1

Si alguien quisiera construir un equivalente de Powershell, me gustaría incluirlo también. Otras mejoras potenciales incluyen la verificación de errores en los parámetros y la factorización de la llamada a $(hg root).

Jason R. Coombs
fuente