8

Tengo problemas para configurar un proyecto en Mercurial con subrepos.¿Puedo anidar subrepos en Mercurial?

Objetivo:

Quiero establecer la estructura de este modo:

-- Build_Repo (this repo will be used to track dependencies) 
    -- Subrepo_A (this is the main source) 
    -- Modules (Part of Subrepo_A) 
     -- Subrepo_B 

Así que hay tres repositorios: Construir, A y B. B se anida en el interior A, A es anidado dentro del repositorio de compilación raíz. El repositorio de compilación se usará para rastrear las dependencias, el subrepo A se usará para rastrear los principales archivos fuente, y el subrepo B (y otros) se usarán para rastrear el desarrollo del módulo/complemento.

Problema/Pregunta

no tengo ni la creación de la cesión temporal de construcción inicial y el Subrepo_A anidada, simplemente añadiendo el camino Subrepo_A y origen en el archivo .hgsub y se comprometía a construir el repositorio problema. repo ruta 'Subrepo_A/Módulos/Sebrepo_B' que está dentro anidado ': Sin embargo, cuando después añado el subrepo_B ruta/fuente a .hgsub de la cesión temporal de construcción, y luego tratar de comprometerse consigo el mensaje de error:

aborto Subrepo_A '

Mercurial no parece que le gusta un repositorio anidado dentro de un repositorio ya anidado. ¿Es esto cierto o me estoy perdiendo algo? ¿Alguna mejor idea sobre cómo administrar compilaciones/dependencias?

+0

¿Qué idioma/conjunto de herramientas está utilizando? En general, sub-repos como gestión de la dependencia no son óptimos. Me gusta construir un módulo, publicar sus artefactos (nexus, artifactory, etc.) y tener módulos dependientes que lo consuman. – thekbb

Respuesta

0

En su caso, tendrá que agregar subrepoB a subrepoA.

Sugeriría que intentes mover dependencias para que tu árbol solo tenga 2 niveles, pero eso puede no ser posible. Por lo general, no es una experiencia muy suave.

+1

¿Alguna otra recomendación sobre cómo administrar las dependencias en esta situación? –

+0

La respuesta a esto, como han señalado otros, es hacer subrepoB un subrepo de subrepoA, y subrepoA un subrepo de build_repo. Parece que no quieres hacer esto por alguna razón. Si es porque subrepoA es un clon de un proyecto que usted no controla y, por lo tanto, no puede agregar un subrepo, una forma de hacerlo es crear un bifurcación/clon privado de subrepoA, y usarlo como el repositorio para " subrepoA ". De esta forma, puede agregarle personalizaciones (agregarle subrepo) y aún mantenerse sincronizado con las actualizaciones pulic/externas de subrepoA. –

1

El problema aquí es una de las limitaciones ineludibles de Mercurial: un repositorio corresponde a un árbol de carpetas en su computadora. El repositorio es responsable de todo bajo ese árbol de carpetas.

Cuando su repositorio de nivel superior incluye un sub-repositorio, lo transfiere al control completo sub-repo de esa parte de su estructura de carpetas. Entonces, el nivel superior no puede especificar otro sub repositorio en alguna parte de las primeras carpetas sub-repos.

Solución 1

Subrepo_B es en realidad una dependencia de Subrepo_A. En ese caso, haga que sus repositorios reflejen la verdadera dependencia editando el archivo .hgsub de Subrepo_A para agregar Subrepo_B en Módulos/Sebrepo_B. Esto funciona porque Subrepo_A conserva el control sobre sus carpetas.

Solución 2

Subrepo_A no depende de Subrepo_B, que estaban poniendo allí por conveniencia. En este caso, debe hacer que tanto Subrepo_A como Subrepo_B sean subrepos (en diferentes ubicaciones) de Build_Repo.

Cuestiones relacionadas