2012-02-24 13 views
5

A menudo trabajo con Mercurial manteniendo una tienda local de mis clones aguas arriba, y luego sólo la clonación de nuevo in situ para mi entorno de trabajo real:¿Cómo hacer un clon local sin tirar subrepos nuevamente?

$ cd /clones 
$ hg clone ssh://external-repo.example.com/some/repo/path/foo 
$ cd ~/Development 
$ hg clone /clones/foo 

Esto es particularmente útil para mí porque a menudo quieren hacer nuevos clones en aviones, etc., donde no tengo acceso a internet. Sin embargo, esto no funciona cuando el clon original contiene subrepos: la presencia del archivo .hgsubstate significa que hg siempre irá a Internet en lugar de capturar la revisión clonada local (incluso si son mismos). ¿Hay alguna forma de hacer que un clon local copie los archivos sin tener que salir a internet?

This question tiene una respuesta que probablemente trabajar, pero parece muy desafortunado para la gestión a largo plazo (eliminando el archivo .hgsubstate en el clon de /clones/, y luego hacer los clones locales de eso).

Respuesta

5

Usted puede utilizar una ruta subrepository "trivial" en el archivo de .hgsub así:

foo = foo 
bar = bar 

Este es el recommended setup. La ventaja de configurar un diseño es que un clon tiene la misma estructura como el depósito desde el que se clona. Así puedes clonar tus clones cuando estás en un avión.

Como alternativa, puede usar la configuración [subpaths] para volver a asignar las direcciones URL a las rutas de acceso locales. Esto le permite agregar

[subpaths] 
http://server/(.*) = /clones/libs/\1 

a su archivo ~/.hgrc y luego se verá que los caminos se reasignan a /clones/libs al clonar.

+0

Gracias, esto es exactamente lo que quiero, probablemente sea demasiado difícil cambiar todos nuestros repositorios existentes a "triviales", pero los usaré para los nuevos. Afortunadamente, subpaths resolverá mi problema para los existentes. –

1

Puede lograr esto clonando los subrepositorios usted mismo. Suponiendo que foo tiene un subrepo single llamado barra:

$ cd ~/Development 
$ hg clone -U /clones/foo 
$ hg clone -U /clones/foo/bar foo/bar 
$ hg update -R foo 

La actualización no es necesario para acceder a Internet ya que existe la subrepository y contiene el conjunto de cambios necesarios para la actualización en el maestro.

Cuestiones relacionadas