2010-03-09 24 views
8

¿Cuál es la mejor/más fácil manera (o incluso es posible) para agregar un repositorio existente a otro repositorio existente como un subrepo?¿Cómo agrego un subrepo a un repositorio existente en mercurial

La situación es Tengo un proyecto existente (principal) en el que quiero incluir un proyecto de biblioteca para poder editar el proyecto de biblioteca desde el proyecto principal y comprometer los cambios al proyecto de biblioteca al enviar el proyecto principal.

También: ¿Necesito clonar/empujar/tirar al proyecto original de la biblioteca, o esto se hace automáticamente al comprometerme en el proyecto principal?

Saludos
Jesper Hauge

+0

buena pregunta - Documentación subrepo no es el mejor en la actualidad –

+0

acuerdo - Tenía la esperanza de que alguien tenía alguna experiencia práctica con éste, ya que yo creo que mi la situación es muy común. – Hauge

Respuesta

5

La documentación del subrepo me confundió tanto que escribí un guión de shell para abstraer esa parte de ella.

addsubrepo.sh

llamar así

$ cd $TOP_OF_HG_PROJECT 
$ addsubrepo.sh $URL_TO_HG_PROJECT relative_path/you/want_to/put_the_subrepo 
+0

Desgraciadamente estoy en una caja de Windows, así que no hay guiones de shell para mí, pero tus guiones probablemente podrían ser portados a un script de powershell, parece un poco exagerado, para una función tan básica: -o – Hauge

+1

Siempre hay Cygwin, es grande, pero funciona bien. – reinierpost

+0

Se siente exagerado, pero parece que cada vez que trato de hacer un subrepo en hg lo arruino. Ahora no :) Por lo menos esto le muestra cómo se hace – RyanWilcox

0

Es posible que desee utilizar la extensión deps.

+0

¿No es la extensión deps solo para repositorios externos que no son repos de mercurial? ¿Deps me permite realizar cambios en el repositorio "incluido"? – Hauge

+0

De acuerdo con los documentos, admite 'cualquier' tipo de repositorio, incluido Mercurial – Mikezx6r

+0

. Si tiene un sub-repositorio Mercurial, simplemente ingréselo y presione desde allí. Podrá distinguir el "contenedor" (interno o externo). –

2

lectura de la documentación, el plugin subrepo soporta esta funcionalidad.

No lo he usado todavía, pero probablemente empiece a usarlo en el futuro cercano.

Se ha mejorado cada lanzamiento de Mercurial, y creo que la gente lo está usando con éxito. Parece obtener una cantidad razonable de atención, y estaba en la agenda de la última campaña de codificación.

De acuerdo con help, pull, push, commit etc deben actuar en el subrepo también. Parece que una confirmación verificará si hay algún cambio en el subrepo. Si los hay, se comprometerán y el nuevo conjunto de cambios en el subrepo se registrará en el archivo .hgsubstate. A continuación, se confirmará este archivo, así como los cambios en el repositorio principal.

Al clonar, Mercurial debería ver el archivo .hgsubstate y el archivo .hgsub, extraer correctamente el subrepo y actualizar a la revisión correcta.

0

Así es como lo hice:

$ cd /projects/main_project 
$ hg clone /projects/plugins/awesome plugins/awesome_plugin 
$ echo plugins/awesome_plugin = plugins/awesome_plugin > .hgsub 
$ hg add .hgsub 
$ hg commit -m "added awesome_plugin plugin as a subp-repo" 
Cuestiones relacionadas